)]}'
{"neutron/common/constants.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1772d7653633296223eacb7d2b5a400e0eb884aa","unresolved":false,"context_lines":[{"line_number":166,"context_line":"PORT_BINDING_STATUSES \u003d (PORT_BINDING_STATUS_ACTIVE,"},{"line_number":167,"context_line":"                         PORT_BINDING_STATUS_INACTIVE)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"# Possible types of values (e.g. in QoS rule types)"},{"line_number":170,"context_line":"VALUES_TYPE_CHOICES \u003d \"choices\""},{"line_number":171,"context_line":"VALUES_TYPE_RANGE \u003d \"range\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_82dcd418","line":169,"updated":"2017-07-11 10:24:05.000000000","message":"why do we need these conatants defined here and not in the qos code?","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7c6206d269741d263f7651709475934b72102fa7","unresolved":false,"context_lines":[{"line_number":166,"context_line":"PORT_BINDING_STATUSES \u003d (PORT_BINDING_STATUS_ACTIVE,"},{"line_number":167,"context_line":"                         PORT_BINDING_STATUS_INACTIVE)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"# Possible types of values (e.g. in QoS rule types)"},{"line_number":170,"context_line":"VALUES_TYPE_CHOICES \u003d \"choices\""},{"line_number":171,"context_line":"VALUES_TYPE_RANGE \u003d \"range\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_84ebb910","line":169,"in_reply_to":"3f1d235d_82dcd418","updated":"2017-07-11 14:24:36.000000000","message":"I thought it can be added here as it is not directly related to QoS only","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"}],"neutron/extensions/qos.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c03bb35965ccd69024f5bd5a07f0a689bcf14921","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    \u0027rule_types\u0027: {"},{"line_number":75,"context_line":"        \u0027type\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":76,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":77,"context_line":"        \u0027drivers\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":78,"context_line":"                    \u0027is_visible\u0027: True}"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_9b4493b9","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":39},"updated":"2017-06-20 14:32:13.000000000","message":"You can\u0027t change the current extension API. Like in https://review.openstack.org/#/c/449831/, you should create a new extension.","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f572a8e90e4dff5bd75184aaf123f0fd08b6cc88","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    \u0027rule_types\u0027: {"},{"line_number":75,"context_line":"        \u0027type\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":76,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":77,"context_line":"        \u0027drivers\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":78,"context_line":"                    \u0027is_visible\u0027: True}"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_34f9bbc7","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":39},"in_reply_to":"5f201791_9b4493b9","updated":"2017-06-22 22:48:55.000000000","message":"Done","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"}],"neutron/objects/qos/rule_type.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c03bb35965ccd69024f5bd5a07f0a689bcf14921","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(RuleTypeField, self).__init__(**kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ListOfDictOfMiscValuesField(obj_fields.AutoTypedField):"},{"line_number":35,"context_line":"    AUTO_TYPE \u003d obj_fields.List(common_types.DictOfMiscValuesField())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_5bcb9b1d","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":69},"updated":"2017-06-20 14:32:13.000000000","message":"You should move this to objects/common_types","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f572a8e90e4dff5bd75184aaf123f0fd08b6cc88","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(RuleTypeField, self).__init__(**kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ListOfDictOfMiscValuesField(obj_fields.AutoTypedField):"},{"line_number":35,"context_line":"    AUTO_TYPE \u003d obj_fields.List(common_types.DictOfMiscValuesField())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_1790014e","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":69},"in_reply_to":"5f201791_5bcb9b1d","updated":"2017-06-22 22:48:55.000000000","message":"You are right. I proposed it as separate patch: https://review.openstack.org/#/c/476712/","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c03bb35965ccd69024f5bd5a07f0a689bcf14921","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    # Version 1.1: Added QosDscpMarkingRule"},{"line_number":42,"context_line":"    # Version 1.2: Added QosMinimumBandwidthRule"},{"line_number":43,"context_line":"    # Version 1.3: Added drivers field"},{"line_number":44,"context_line":"    VERSION \u003d \u00271.3\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027type\u0027: RuleTypeField(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_3b6c5f07","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":19},"updated":"2017-06-20 14:32:13.000000000","message":"You should implement obj_make_compatible to downgrade the OVO to \u003c1.3 if needed","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f572a8e90e4dff5bd75184aaf123f0fd08b6cc88","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    # Version 1.1: Added QosDscpMarkingRule"},{"line_number":42,"context_line":"    # Version 1.2: Added QosMinimumBandwidthRule"},{"line_number":43,"context_line":"    # Version 1.3: Added drivers field"},{"line_number":44,"context_line":"    VERSION \u003d \u00271.3\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027type\u0027: RuleTypeField(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_17092130","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":19},"in_reply_to":"5f201791_3b6c5f07","updated":"2017-06-22 22:48:55.000000000","message":"Done","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"b8365145676b69b2d79a247fc457da4b456a1fff","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def get_object(cls, rule_type_name, **kwargs):"},{"line_number":57,"context_line":"        drivers_obj \u003d []"},{"line_number":58,"context_line":"        plugin \u003d directory.get_plugin(alias\u003dconstants.QOS)"},{"line_number":59,"context_line":"        drivers_dict \u003d plugin.supported_rule_type_details(rule_type_name)"},{"line_number":60,"context_line":"        drivers_obj \u003d [QosRuleTypeDriver("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f231b9d_edd3e2ff","line":57,"range":{"start_line":57,"start_character":1,"end_line":57,"end_character":24},"updated":"2017-06-19 08:20:44.000000000","message":"do we need this line  when we have line#60 as the list -comprehension?","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f572a8e90e4dff5bd75184aaf123f0fd08b6cc88","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def get_object(cls, rule_type_name, **kwargs):"},{"line_number":57,"context_line":"        drivers_obj \u003d []"},{"line_number":58,"context_line":"        plugin \u003d directory.get_plugin(alias\u003dconstants.QOS)"},{"line_number":59,"context_line":"        drivers_dict \u003d plugin.supported_rule_type_details(rule_type_name)"},{"line_number":60,"context_line":"        drivers_obj \u003d [QosRuleTypeDriver("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_6a09882a","line":57,"range":{"start_line":57,"start_character":1,"end_line":57,"end_character":24},"in_reply_to":"5f201791_db232b05","updated":"2017-06-22 22:48:55.000000000","message":"I just forgot to remove it :) Thx for catch that","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c03bb35965ccd69024f5bd5a07f0a689bcf14921","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def get_object(cls, rule_type_name, **kwargs):"},{"line_number":57,"context_line":"        drivers_obj \u003d []"},{"line_number":58,"context_line":"        plugin \u003d directory.get_plugin(alias\u003dconstants.QOS)"},{"line_number":59,"context_line":"        drivers_dict \u003d plugin.supported_rule_type_details(rule_type_name)"},{"line_number":60,"context_line":"        drivers_obj \u003d [QosRuleTypeDriver("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_db232b05","line":57,"range":{"start_line":57,"start_character":1,"end_line":57,"end_character":24},"in_reply_to":"7f231b9d_edd3e2ff","updated":"2017-06-20 14:32:13.000000000","message":"+1","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"715478c752a898b04c5a2eb5deeb249966927c7c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        _target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if _target_version \u003c (1, 3):"},{"line_number":85,"context_line":"            primitive.pop(\u0027drivers\u0027, [])"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_5cc0a32a","line":85,"range":{"start_line":85,"start_character":37,"end_line":85,"end_character":39},"updated":"2017-06-26 08:37:01.000000000","message":"I doesn\u0027t matter which value you are returning here. Because of this and just to avoid raising an exception is case \u0027drivers\u0027 is not present, you should return \"None\"","commit_id":"f1aa684811f13be02c83d7baf2f9a2fa321511e9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bd96dbc50189801c1c42170fb6a6615491e7aa93","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        _target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if _target_version \u003c (1, 3):"},{"line_number":85,"context_line":"            primitive.pop(\u0027drivers\u0027, [])"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_9c751bce","line":85,"range":{"start_line":85,"start_character":37,"end_line":85,"end_character":39},"in_reply_to":"5f201791_5cc0a32a","updated":"2017-06-26 08:44:12.000000000","message":"Done","commit_id":"f1aa684811f13be02c83d7baf2f9a2fa321511e9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"715478c752a898b04c5a2eb5deeb249966927c7c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \u0027supported_parameters\u0027: ListOfDictOfMiscValuesField()"},{"line_number":96,"context_line":"    }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def to_dict(self):"},{"line_number":99,"context_line":"        return {"},{"line_number":100,"context_line":"            \u0027name\u0027: self.name,"},{"line_number":101,"context_line":"            \u0027supported_parameters\u0027: self.supported_parameters}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @classmethod"},{"line_number":104,"context_line":"    def get_objects(cls, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_bc40d7a6","line":101,"range":{"start_line":98,"start_character":2,"end_line":101,"end_character":62},"updated":"2017-06-26 08:37:01.000000000","message":"Why do you need this redefinition?\n\nIs the same as objects.base.NeutronObject.to_dict()","commit_id":"f1aa684811f13be02c83d7baf2f9a2fa321511e9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bd96dbc50189801c1c42170fb6a6615491e7aa93","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \u0027supported_parameters\u0027: ListOfDictOfMiscValuesField()"},{"line_number":96,"context_line":"    }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def to_dict(self):"},{"line_number":99,"context_line":"        return {"},{"line_number":100,"context_line":"            \u0027name\u0027: self.name,"},{"line_number":101,"context_line":"            \u0027supported_parameters\u0027: self.supported_parameters}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @classmethod"},{"line_number":104,"context_line":"    def get_objects(cls, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_9c875bb6","line":101,"range":{"start_line":98,"start_character":2,"end_line":101,"end_character":62},"in_reply_to":"5f201791_bc40d7a6","updated":"2017-06-26 08:44:12.000000000","message":"without this redefinition it returned me \"string\" value instead of dict","commit_id":"f1aa684811f13be02c83d7baf2f9a2fa321511e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @classmethod"},{"line_number":53,"context_line":"    def get_object(cls, rule_type_name, **kwargs):"},{"line_number":54,"context_line":"        plugin \u003d directory.get_plugin(alias\u003dconstants.QOS)"},{"line_number":55,"context_line":"        drivers_dict \u003d plugin.supported_rule_type_details(rule_type_name)"},{"line_number":56,"context_line":"        drivers_obj \u003d [QosRuleTypeDriver("},{"line_number":57,"context_line":"            name\u003ddriver[\u0027name\u0027],"},{"line_number":58,"context_line":"            supported_parameters\u003ddriver[\u0027supported_parameters\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_11117b54","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":20},"updated":"2017-07-07 17:16:28.000000000","message":"one could think it\u0027s a dict, but it\u0027s a list actually, so the name of the variable may need a refinement","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3b044ec33bcc905063c39916c004156f3ee77ff4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @classmethod"},{"line_number":53,"context_line":"    def get_object(cls, rule_type_name, **kwargs):"},{"line_number":54,"context_line":"        plugin \u003d directory.get_plugin(alias\u003dconstants.QOS)"},{"line_number":55,"context_line":"        drivers_dict \u003d plugin.supported_rule_type_details(rule_type_name)"},{"line_number":56,"context_line":"        drivers_obj \u003d [QosRuleTypeDriver("},{"line_number":57,"context_line":"            name\u003ddriver[\u0027name\u0027],"},{"line_number":58,"context_line":"            supported_parameters\u003ddriver[\u0027supported_parameters\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_2f6892b8","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":20},"in_reply_to":"3f1d235d_11117b54","updated":"2017-07-07 22:10:33.000000000","message":"changed","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"}],"neutron/services/qos/drivers/manager.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_71878f63","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"updated":"2017-07-07 17:16:28.000000000","message":"you seem to rely on the order of dict.keys() being stable. it\u0027s not.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"27e6bd2cf46036349540de9541d50ba027f7d26a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_8fa62d53","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"in_reply_to":"3f1d235d_0f46f622","updated":"2017-07-11 18:33:30.000000000","message":"If it\u0027s supposed to have a single value, one can have a legit question why it\u0027s a dict in the first place.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3323d782e9db6259c710e6b343e3b187dd422eea","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_e0592b35","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"in_reply_to":"3f1d235d_3dc74c15","updated":"2017-07-11 21:14:24.000000000","message":"Ok. So I will left it as it is now. Once again - sorry for that","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"59865d7898500a4a79284eb25e6f6e8d3f16ea2d","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_3dc74c15","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"in_reply_to":"3f1d235d_479b59c8","updated":"2017-07-11 21:06:12.000000000","message":"This seems like driver api change, again. If possible, let\u0027s avoid it.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3b044ec33bcc905063c39916c004156f3ee77ff4","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_0f46f622","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"in_reply_to":"3f1d235d_71878f63","updated":"2017-07-07 22:10:33.000000000","message":"I changed it to get it by .items() method\nAbout order it shouldn\u0027t be a problem as this dict can have only one (key, value) pair in fact because it is only \"validator type\" \u003d\u003e valid_values for each parameter.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b7136649c39694e4ed1a68a85c0ed8df4b9d8abb","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_479b59c8","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":51},"in_reply_to":"3f1d235d_8fa62d53","updated":"2017-07-11 19:42:39.000000000","message":"You\u0027re right. I don\u0027t know why I did it like that.\nProbably tuple would be better there. I will propose new patch with change of it soon. Will it be fine for You?","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def _parse_parameter_values(parameter_values):"},{"line_number":89,"context_line":"        validator \u003d list(parameter_values.keys())[0]"},{"line_number":90,"context_line":"        possible_values \u003d list(parameter_values.values())[0]"},{"line_number":91,"context_line":"        if validator \u003d\u003d \u0027type:range\u0027:"},{"line_number":92,"context_line":"            parameter_values \u003d {"},{"line_number":93,"context_line":"                \"start\": possible_values[0],"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_d18f8373","line":90,"range":{"start_line":90,"start_character":26,"end_line":90,"end_character":60},"updated":"2017-07-07 17:16:28.000000000","message":"and here, you rely on the order of .values() to reflect the order of .keys() from the previous line. it\u0027s not guaranteed to match.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"}],"neutron/services/qos/qos_plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c03bb35965ccd69024f5bd5a07f0a689bcf14921","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":280,"context_line":"        if not filters:"},{"line_number":281,"context_line":"            filters \u003d {}"},{"line_number":282,"context_line":"        return rule_type_object.QosRuleType.get_objects(**filters)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def supported_rule_type_details(self, rule_type_name):"},{"line_number":285,"context_line":"        return self.driver_manager.supported_rule_type_details(rule_type_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_9e17e1ee","line":282,"range":{"start_line":282,"start_character":15,"end_line":282,"end_character":66},"updated":"2017-06-20 14:32:13.000000000","message":"Now here you are going to return an object with a new field, \"drivers\", which is a syntethic value. This value will be empty.\n\nTo keep backwards compatibility, you should return a QosRuleType object without this field.","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7ab4dde26b41d68a415e4b1ebbaf4ca07c2b0649","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":280,"context_line":"        if not filters:"},{"line_number":281,"context_line":"            filters \u003d {}"},{"line_number":282,"context_line":"        return rule_type_object.QosRuleType.get_objects(**filters)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def supported_rule_type_details(self, rule_type_name):"},{"line_number":285,"context_line":"        return self.driver_manager.supported_rule_type_details(rule_type_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_7c2c7fab","line":282,"range":{"start_line":282,"start_character":15,"end_line":282,"end_character":66},"in_reply_to":"5f201791_7c90ffed","updated":"2017-06-26 08:43:24.000000000","message":"As I was checking that \"drivers\" field is not returned in dict as result of this call","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f572a8e90e4dff5bd75184aaf123f0fd08b6cc88","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":280,"context_line":"        if not filters:"},{"line_number":281,"context_line":"            filters \u003d {}"},{"line_number":282,"context_line":"        return rule_type_object.QosRuleType.get_objects(**filters)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def supported_rule_type_details(self, rule_type_name):"},{"line_number":285,"context_line":"        return self.driver_manager.supported_rule_type_details(rule_type_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_aa9b20c7","line":282,"range":{"start_line":282,"start_character":15,"end_line":282,"end_character":66},"in_reply_to":"5f201791_9e17e1ee","updated":"2017-06-22 22:48:55.000000000","message":"but compatibility with what exactly?\nconvert_result_to_dict decorator will remove this not set field from returned dict and it will be not returned to user. So IMHO it is backward compatible.","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0582b891653ef918362fbaab88b29075bfb7b637","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":280,"context_line":"        if not filters:"},{"line_number":281,"context_line":"            filters \u003d {}"},{"line_number":282,"context_line":"        return rule_type_object.QosRuleType.get_objects(**filters)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def supported_rule_type_details(self, rule_type_name):"},{"line_number":285,"context_line":"        return self.driver_manager.supported_rule_type_details(rule_type_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_7c90ffed","line":282,"range":{"start_line":282,"start_character":15,"end_line":282,"end_character":66},"in_reply_to":"5f201791_aa9b20c7","updated":"2017-06-26 08:40:43.000000000","message":"\"convert_result_to_dict\" will return this new field too.\n\nWhat I mean is you need to be careful not modifying the API. That could be tested with tempest/fullstack tests.","commit_id":"fc26d849335aa0339ede9e54398e4c1897a10e76"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":270,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":271,"context_line":"    def get_rule_type(self, context, rule_type_name, fields\u003dNone):"},{"line_number":272,"context_line":"        if not context.is_admin:"},{"line_number":273,"context_line":"            raise lib_exc.NotAuthorized()"},{"line_number":274,"context_line":"        return rule_type_object.QosRuleType.get_object(rule_type_name)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @db_base_plugin_common.filter_fields"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_513ff386","line":273,"range":{"start_line":272,"start_character":8,"end_line":273,"end_character":41},"updated":"2017-07-07 17:16:28.000000000","message":"should this be controlled via policy.json?","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3b044ec33bcc905063c39916c004156f3ee77ff4","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":270,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":271,"context_line":"    def get_rule_type(self, context, rule_type_name, fields\u003dNone):"},{"line_number":272,"context_line":"        if not context.is_admin:"},{"line_number":273,"context_line":"            raise lib_exc.NotAuthorized()"},{"line_number":274,"context_line":"        return rule_type_object.QosRuleType.get_object(rule_type_name)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @db_base_plugin_common.filter_fields"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_747c1deb","line":273,"range":{"start_line":272,"start_character":8,"end_line":273,"end_character":41},"in_reply_to":"3f1d235d_513ff386","updated":"2017-07-07 22:10:33.000000000","message":"No. As is decided in specs https://github.com/openstack/neutron-specs/blob/master/specs/pike/qos-detailed-reporting-of-available-rules.rst it should be available only for admin users","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1772d7653633296223eacb7d2b5a400e0eb884aa","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":270,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":271,"context_line":"    def get_rule_type(self, context, rule_type_name, fields\u003dNone):"},{"line_number":272,"context_line":"        if not context.is_admin:"},{"line_number":273,"context_line":"            raise lib_exc.NotAuthorized()"},{"line_number":274,"context_line":"        return rule_type_object.QosRuleType.get_object(rule_type_name)"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_02d0c4f6","line":272,"updated":"2017-07-11 10:24:05.000000000","message":"why are we not using policy.json for this?","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7c6206d269741d263f7651709475934b72102fa7","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":270,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":271,"context_line":"    def get_rule_type(self, context, rule_type_name, fields\u003dNone):"},{"line_number":272,"context_line":"        if not context.is_admin:"},{"line_number":273,"context_line":"            raise lib_exc.NotAuthorized()"},{"line_number":274,"context_line":"        return rule_type_object.QosRuleType.get_object(rule_type_name)"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_04c0c97b","line":272,"in_reply_to":"3f1d235d_02d0c4f6","updated":"2017-07-11 14:24:36.000000000","message":"It was decided in spec for this change that this call should be available for admins only: https://github.com/openstack/neutron-specs/blob/master/specs/pike/qos-detailed-reporting-of-available-rules.rst","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"}],"neutron/tests/tempest/api/test_qos.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @decorators.idempotent_id(\u0027d0a2460b-7325-481f-a531-050bd96ab25e\u0027)"},{"line_number":189,"context_line":"    def test_show_rule_type_details_as_admin(self):"},{"line_number":190,"context_line":"        # Since returned rule types depends on loaded backend drivers this test"},{"line_number":191,"context_line":"        # is checking only if returned keys are same as expected keys"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # In theory, we could make the test conditional on which ml2 drivers"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_d152e3de","line":190,"range":{"start_line":190,"start_character":36,"end_line":190,"end_character":43},"updated":"2017-07-07 17:16:28.000000000","message":"nit: depend","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3b044ec33bcc905063c39916c004156f3ee77ff4","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @decorators.idempotent_id(\u0027d0a2460b-7325-481f-a531-050bd96ab25e\u0027)"},{"line_number":189,"context_line":"    def test_show_rule_type_details_as_admin(self):"},{"line_number":190,"context_line":"        # Since returned rule types depends on loaded backend drivers this test"},{"line_number":191,"context_line":"        # is checking only if returned keys are same as expected keys"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # In theory, we could make the test conditional on which ml2 drivers"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_00f5a383","line":190,"range":{"start_line":190,"start_character":36,"end_line":190,"end_character":43},"in_reply_to":"3f1d235d_d152e3de","updated":"2017-07-07 22:10:33.000000000","message":"Done","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"82d47d4991dbdc2d0f25fa41986abd97ad5a859a","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        # Since returned rule types depends on loaded backend drivers this test"},{"line_number":191,"context_line":"        # is checking only if returned keys are same as expected keys"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # In theory, we could make the test conditional on which ml2 drivers"},{"line_number":194,"context_line":"        # are enabled in gate, but that option doesn\u0027t seem to be"},{"line_number":195,"context_line":"        # available through tempest.lib framework"},{"line_number":196,"context_line":"        expected_rule_type_details_keys \u003d [\u0027type\u0027, \u0027drivers\u0027]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        rule_type_details \u003d self.admin_client.show_qos_rule_type("}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_11729b7d","line":195,"range":{"start_line":193,"start_character":9,"end_line":195,"end_character":49},"updated":"2017-07-07 17:16:28.000000000","message":"we can add an option for that to our tempest plugin though. but I don\u0027t think it\u0027s worth it.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3b044ec33bcc905063c39916c004156f3ee77ff4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        # Since returned rule types depends on loaded backend drivers this test"},{"line_number":191,"context_line":"        # is checking only if returned keys are same as expected keys"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # In theory, we could make the test conditional on which ml2 drivers"},{"line_number":194,"context_line":"        # are enabled in gate, but that option doesn\u0027t seem to be"},{"line_number":195,"context_line":"        # available through tempest.lib framework"},{"line_number":196,"context_line":"        expected_rule_type_details_keys \u003d [\u0027type\u0027, \u0027drivers\u0027]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        rule_type_details \u003d self.admin_client.show_qos_rule_type("}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_d44d31c5","line":195,"range":{"start_line":193,"start_character":9,"end_line":195,"end_character":49},"in_reply_to":"3f1d235d_11729b7d","updated":"2017-07-07 22:10:33.000000000","message":"We discussed it with Kevin some time ago in context of different patch https://review.openstack.org/#/c/477192/ - You can see logs from Irc on http://eavesdrop.openstack.org/meetings/networking/2017/networking.2017-06-26-21.17.log.html#l-53\n\nWe then decided that such option would be easiest and should be enough here for assertion.\n\nThere can be also issue with other, non ML2 deployments which could be broken then also.","commit_id":"b95ab454dcb601034dccc471a5a8b00f7a4b9e65"}],"releasenotes/notes/qos-rule-type-details-api-call-27d792980235aec4.yaml":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1772d7653633296223eacb7d2b5a400e0eb884aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    New API call to get details about details of supported rule type."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    The QoS service plugin can now expose details about supported QoS rule"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3f1d235d_027d641b","line":3,"range":{"start_line":3,"start_character":24,"end_line":3,"end_character":46},"updated":"2017-07-11 10:24:05.000000000","message":"should this not be:\nNew API to get details of supported rule types? or details of a supported rule type.","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7c6206d269741d263f7651709475934b72102fa7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    New API call to get details about details of supported rule type."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    The QoS service plugin can now expose details about supported QoS rule"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3f1d235d_a40475c7","line":3,"range":{"start_line":3,"start_character":24,"end_line":3,"end_character":46},"in_reply_to":"3f1d235d_027d641b","updated":"2017-07-11 14:24:36.000000000","message":"Done","commit_id":"13261e19f1de85f344e317ba70a50fbd1a7693bb"}]}
