)]}'
{"quantum/api/v2/base.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"6f923a69c951474e6dbbc56d1c3832fe7a04f361","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        return body"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    @staticmethod"},{"line_number":507,"context_line":"    def _validate_attribute(res_dict, attr_info):"},{"line_number":508,"context_line":"        invalid_keys \u003d []"},{"line_number":509,"context_line":"        for res_key, res_value in res_dict.iteritems():"},{"line_number":510,"context_line":"            if (res_key not in attr_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B3pU%3D","line":507,"updated":"2013-02-15 23:09:43.000000000","message":"Consider this implementation:\n\ndef _validate_(resource_dict, attr_info):\n    extra_keys \u003d set(resource_dict.keys()) - set(attr_info.keys())\n    if extra_keys:\n        msg \u003d _(\"Unrecognized attribute(s) \u0027%s\u0027\") % \u0027, \u0027.join(extra_keys))\n        raise kebob.exc.HTTPBadRequest(msg)","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":504,"context_line":"        return body"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    @staticmethod"},{"line_number":507,"context_line":"    def _validate_attribute(res_dict, attr_info):"},{"line_number":508,"context_line":"        invalid_keys \u003d []"},{"line_number":509,"context_line":"        for res_key, res_value in res_dict.iteritems():"},{"line_number":510,"context_line":"            if (res_key not in attr_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzmE%3D","line":507,"in_reply_to":"AAAAM3%2F%2B3Ug%3D","updated":"2013-02-18 21:43:42.000000000","message":"It\u0027s up to Jason whether he feels refactoring should be part of this patch.\n\nTo me it\u0027s fine where it is now, once Mark\u0027s comments have been addressed.\nI would just suggest to change this method name to _verify_attributes","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":4184,"name":"Jason Zhang","email":"zhesen@nttmcl.com","username":"zzs"},"unresolved":false,"context_lines":[{"line_number":504,"context_line":"        return body"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    @staticmethod"},{"line_number":507,"context_line":"    def _validate_attribute(res_dict, attr_info):"},{"line_number":508,"context_line":"        invalid_keys \u003d []"},{"line_number":509,"context_line":"        for res_key, res_value in res_dict.iteritems():"},{"line_number":510,"context_line":"            if (res_key not in attr_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bw2o%3D","line":507,"in_reply_to":"AAAAM3%2F%2B3Ug%3D","updated":"2013-02-19 18:56:03.000000000","message":"Zhongyue, I agree with Salvatore, I think we can refactor it later for focusing current implementation.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":504,"context_line":"        return body"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    @staticmethod"},{"line_number":507,"context_line":"    def _validate_attribute(res_dict, attr_info):"},{"line_number":508,"context_line":"        invalid_keys \u003d []"},{"line_number":509,"context_line":"        for res_key, res_value in res_dict.iteritems():"},{"line_number":510,"context_line":"            if (res_key not in attr_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B3Ug%3D","line":507,"in_reply_to":"AAAAM3%2F%2B3cc%3D","updated":"2013-02-16 02:22:26.000000000","message":"This method looks a lot like _verify_dict_keys() in quantum/api/v2/attributes.py. Maybe we can move this to quantum/common/utils.py and use it together?","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":4184,"name":"Jason Zhang","email":"zhesen@nttmcl.com","username":"zzs"},"change_message_id":"7487e0f7921698081b6074488f653e33cafc65cf","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        return body"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    @staticmethod"},{"line_number":507,"context_line":"    def _validate_attribute(res_dict, attr_info):"},{"line_number":508,"context_line":"        invalid_keys \u003d []"},{"line_number":509,"context_line":"        for res_key, res_value in res_dict.iteritems():"},{"line_number":510,"context_line":"            if (res_key not in attr_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B3cc%3D","line":507,"in_reply_to":"AAAAM3%2F%2B3pU%3D","updated":"2013-02-16 01:00:55.000000000","message":"I like this one, thanks mark!","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"}],"quantum/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"6f923a69c951474e6dbbc56d1c3832fe7a04f361","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                                   \u0027delay\u0027: delay,"},{"line_number":225,"context_line":"                                   \u0027timeout\u0027: timeout,"},{"line_number":226,"context_line":"                                   \u0027max_retries\u0027: max_retries,"},{"line_number":227,"context_line":"                                   \u0027admin_state_up\u0027: admin_status_up,"},{"line_number":228,"context_line":"                                   \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":229,"context_line":"        for arg in (\u0027http_method\u0027, \u0027path\u0027, \u0027expected_code\u0027):"},{"line_number":230,"context_line":"            if arg in kwargs and kwargs[arg] is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B3pM%3D","line":227,"updated":"2013-02-15 23:09:43.000000000","message":"This is an unrelated bug should be fixed in a separate patch set.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":4184,"name":"Jason Zhang","email":"zhesen@nttmcl.com","username":"zzs"},"change_message_id":"7487e0f7921698081b6074488f653e33cafc65cf","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                                   \u0027delay\u0027: delay,"},{"line_number":225,"context_line":"                                   \u0027timeout\u0027: timeout,"},{"line_number":226,"context_line":"                                   \u0027max_retries\u0027: max_retries,"},{"line_number":227,"context_line":"                                   \u0027admin_state_up\u0027: admin_status_up,"},{"line_number":228,"context_line":"                                   \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":229,"context_line":"        for arg in (\u0027http_method\u0027, \u0027path\u0027, \u0027expected_code\u0027):"},{"line_number":230,"context_line":"            if arg in kwargs and kwargs[arg] is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B3cM%3D","line":227,"in_reply_to":"AAAAM3%2F%2B3pM%3D","updated":"2013-02-16 01:00:55.000000000","message":"Sure, will do.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"}],"quantum/tests/unit/test_api_v2.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b828fb5542018b2a7b7d6f86356b372c02f022c","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        # Save the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":691,"context_line":"        self.saved_attr_map \u003d {}"},{"line_number":692,"context_line":"        for resource, attrs in attributes.RESOURCE_ATTRIBUTE_MAP.iteritems():"},{"line_number":693,"context_line":"            self.saved_attr_map[resource] \u003d attrs.copy()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        args \u003d [\u0027--config-file\u0027, etcdir(\u0027quantum.conf.test\u0027)]"},{"line_number":696,"context_line":"        config.parse(args\u003dargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B2bE%3D","line":693,"updated":"2013-02-17 03:12:05.000000000","message":"\u0027copy.deepcopy\u0027 should work at here.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":4184,"name":"Jason Zhang","email":"zhesen@nttmcl.com","username":"zzs"},"unresolved":false,"context_lines":[{"line_number":690,"context_line":"        # Save the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":691,"context_line":"        self.saved_attr_map \u003d {}"},{"line_number":692,"context_line":"        for resource, attrs in attributes.RESOURCE_ATTRIBUTE_MAP.iteritems():"},{"line_number":693,"context_line":"            self.saved_attr_map[resource] \u003d attrs.copy()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        args \u003d [\u0027--config-file\u0027, etcdir(\u0027quantum.conf.test\u0027)]"},{"line_number":696,"context_line":"        config.parse(args\u003dargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bw2c%3D","line":693,"in_reply_to":"AAAAM3%2F%2B2bE%3D","updated":"2013-02-19 18:56:03.000000000","message":"Hi Alex, yes, we can refactor it later.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":690,"context_line":"        # Save the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":691,"context_line":"        self.saved_attr_map \u003d {}"},{"line_number":692,"context_line":"        for resource, attrs in attributes.RESOURCE_ATTRIBUTE_MAP.iteritems():"},{"line_number":693,"context_line":"            self.saved_attr_map[resource] \u003d attrs.copy()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        args \u003d [\u0027--config-file\u0027, etcdir(\u0027quantum.conf.test\u0027)]"},{"line_number":696,"context_line":"        config.parse(args\u003dargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bzlc%3D","line":693,"in_reply_to":"AAAAM3%2F%2B2bE%3D","updated":"2013-02-18 21:43:42.000000000","message":"Jason is just copying over code (which might be optimized anyway) from somewhere else.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"}],"quantum/tests/unit/test_servicetype.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if env and \u0027quantum.context\u0027 in env:"},{"line_number":148,"context_line":"            tenant_id \u003d env[\u0027quantum.context\u0027].tenant_id"},{"line_number":149,"context_line":"        data \u003d {self.resource_name: {\u0027name\u0027: svc_type_name,"},{"line_number":150,"context_line":"                                     \u0027tenant-id\u0027: tenant_id}}"},{"line_number":151,"context_line":"        svc_type_id \u003d _uuid()"},{"line_number":152,"context_line":"        return_value \u003d {\u0027id\u0027: svc_type_id,"},{"line_number":153,"context_line":"                        \u0027name\u0027: svc_type_name}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzkY%3D","side":"PARENT","line":150,"updated":"2013-02-18 21:43:42.000000000","message":"Why are you removing the tenant?","commit_id":"8794e23fba4bda583e9f1823d2248c30fbd957d0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1b828fb5542018b2a7b7d6f86356b372c02f022c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        svc_type_name \u003d \u0027updated\u0027"},{"line_number":146,"context_line":"        tenant_id \u003d \u0027fake\u0027"},{"line_number":147,"context_line":"        if env and \u0027quantum.context\u0027 in env:"},{"line_number":148,"context_line":"            tenant_id \u003d env[\u0027quantum.context\u0027].tenant_id"},{"line_number":149,"context_line":"        data \u003d {self.resource_name: {\u0027name\u0027: svc_type_name}}"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        svc_type_id \u003d _uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B2as%3D","line":148,"updated":"2013-02-17 03:12:05.000000000","message":"line 146-148 looks like unuseful.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"        svc_type_name \u003d \u0027updated\u0027"},{"line_number":146,"context_line":"        tenant_id \u003d \u0027fake\u0027"},{"line_number":147,"context_line":"        if env and \u0027quantum.context\u0027 in env:"},{"line_number":148,"context_line":"            tenant_id \u003d env[\u0027quantum.context\u0027].tenant_id"},{"line_number":149,"context_line":"        data \u003d {self.resource_name: {\u0027name\u0027: svc_type_name}}"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        svc_type_id \u003d _uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bzkg%3D","line":148,"in_reply_to":"AAAAM3%2F%2B2as%3D","updated":"2013-02-18 21:43:42.000000000","message":"Please file a bug for the unused env parameter. According how _test_service_type_update is called we might either need to fix the unit test or remove it.\n\nThis is not in the scope of this patch.","commit_id":"109e7b35e5064cd51d4b6934c0b35dd1b04722a9"}]}
