)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"060d56375d41cdfa7c55f0f77e79dc352240ba62","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Haifeng.Yan \u003cyanheven@qq.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-31 00:51:04 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Trivial: fix notify filter when data item is None"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When data[k] is None during match check, we are getting annoying"},{"line_number":10,"context_line":"TypeError exceptions like: \"TypeError: expected string or buffer\"."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa7ab95a_18e692e8","line":7,"updated":"2016-08-31 06:32:53.000000000","message":"According the number of comments and patchsets I don\u0027t think its trivial anymore.","commit_id":"cec026698c57472458448788863fa25afce197d4"}],"oslo_messaging/notify/filter.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"e84138f0943e30e0f14fd2e635516e54dc72acbe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    filter_rule \u003d  NotificationFilter("},{"line_number":32,"context_line":"         publisher_id\u003d\u0027^compute.*\u0027,"},{"line_number":33,"context_line":"         context\u003d{\u0027tenant_id\u0027: \u0027^5f643cfc-664b-4c69-8000-ce2ed7b08216$\u0027,"},{"line_number":34,"context_line":"                  \u0027roles\u003d\u0027private\u0027},"},{"line_number":35,"context_line":"         event_type\u003d\u0027^compute\\.instance\\..*\u0027,"},{"line_number":36,"context_line":"         metadata\u003d{\u0027timestamp\u0027: \u0027Aug\u0027},"},{"line_number":37,"context_line":"         payload\u003d{\u0027state\u0027: \u0027^active$\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_bf3430fb","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":26},"updated":"2016-08-22 09:21:04.000000000","message":"Could you please also fix this typo? It seems that there has to be \u0027roles\u0027: \u0027private\u0027.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"1fa0db5c1b0527f4d510ee038441afcf57ec1282","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    filter_rule \u003d  NotificationFilter("},{"line_number":32,"context_line":"         publisher_id\u003d\u0027^compute.*\u0027,"},{"line_number":33,"context_line":"         context\u003d{\u0027tenant_id\u0027: \u0027^5f643cfc-664b-4c69-8000-ce2ed7b08216$\u0027,"},{"line_number":34,"context_line":"                  \u0027roles\u003d\u0027private\u0027},"},{"line_number":35,"context_line":"         event_type\u003d\u0027^compute\\.instance\\..*\u0027,"},{"line_number":36,"context_line":"         metadata\u003d{\u0027timestamp\u0027: \u0027Aug\u0027},"},{"line_number":37,"context_line":"         payload\u003d{\u0027state\u0027: \u0027^active$\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_f019a07a","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":26},"in_reply_to":"1ac06dbe_bf3430fb","updated":"2016-08-23 06:56:24.000000000","message":"will do.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"e84138f0943e30e0f14fd2e635516e54dc72acbe","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def _check_for_mismatch(data, regex):"},{"line_number":62,"context_line":"        if isinstance(regex, dict):"},{"line_number":63,"context_line":"            for k in regex:"},{"line_number":64,"context_line":"                if (k not in data or data[k] is None):"},{"line_number":65,"context_line":"                    return True"},{"line_number":66,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":67,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_baf1de6c","line":64,"range":{"start_line":64,"start_character":37,"end_line":64,"end_character":41},"updated":"2016-08-22 09:21:04.000000000","message":"Like I mentioned before, I would like to see something like \u0027isinstance(data[k], str)\u0027 here, since it is more generic than just comparing with None.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"5f1fda1bd92a7174f151646415d8b38256d35e13","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def _check_for_mismatch(data, regex):"},{"line_number":62,"context_line":"        if isinstance(regex, dict):"},{"line_number":63,"context_line":"            for k in regex:"},{"line_number":64,"context_line":"                if (k not in data or data[k] is None):"},{"line_number":65,"context_line":"                    return True"},{"line_number":66,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":67,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_36977d49","line":64,"range":{"start_line":64,"start_character":37,"end_line":64,"end_character":41},"in_reply_to":"1ac06dbe_10c0bc7a","updated":"2016-08-23 10:38:47.000000000","message":"Yes, sure, six.string_types will be a better decision.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"1fa0db5c1b0527f4d510ee038441afcf57ec1282","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def _check_for_mismatch(data, regex):"},{"line_number":62,"context_line":"        if isinstance(regex, dict):"},{"line_number":63,"context_line":"            for k in regex:"},{"line_number":64,"context_line":"                if (k not in data or data[k] is None):"},{"line_number":65,"context_line":"                    return True"},{"line_number":66,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":67,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_10c0bc7a","line":64,"range":{"start_line":64,"start_character":37,"end_line":64,"end_character":41},"in_reply_to":"1ac06dbe_baf1de6c","updated":"2016-08-23 06:56:24.000000000","message":"how about isinstance(data[k], six.string_types) ?","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"e84138f0943e30e0f14fd2e635516e54dc72acbe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    return True"},{"line_number":66,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":67,"context_line":"                    return True"},{"line_number":68,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_7af8064a","line":68,"range":{"start_line":68,"start_character":55,"end_line":68,"end_character":57},"updated":"2016-08-22 09:21:04.000000000","message":"Also I think it we can also add a similar check for the data here before trying to match it using the regex.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"1fa0db5c1b0527f4d510ee038441afcf57ec1282","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    return True"},{"line_number":66,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":67,"context_line":"                    return True"},{"line_number":68,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_d04c6444","line":68,"range":{"start_line":68,"start_character":55,"end_line":68,"end_character":57},"in_reply_to":"1ac06dbe_7af8064a","updated":"2016-08-23 06:56:24.000000000","message":"yep. will do.","commit_id":"948b37ceda5aa73b7100d9a25c4046ad1413f039"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"bbd5b315cc03cd7d8adedfef4ece43ea6d8820e4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        elif not isinstance(data, six.string_types):"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":75,"context_line":"                return True"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def match(self, context, publisher_id, event_type, metadata, payload):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c126ca67","line":75,"updated":"2016-08-26 15:00:59.000000000","message":"Incorrect indent","commit_id":"43d2e1e533393790762a6b154b5f2c2b54838191"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"00a4f86761c54de58c946e0e8558be160143ba6b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            for k in regex:"},{"line_number":66,"context_line":"                if k not in data:"},{"line_number":67,"context_line":"                    return True"},{"line_number":68,"context_line":"                if not isinstance(data[k], six.string_types):"},{"line_number":69,"context_line":"                    return True"},{"line_number":70,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":71,"context_line":"                    return True"},{"line_number":72,"context_line":"        elif not isinstance(data, six.string_types):"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":75,"context_line":"                return True"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def match(self, context, publisher_id, event_type, metadata, payload):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c2d6c5c4","line":75,"range":{"start_line":68,"start_character":16,"end_line":75,"end_character":27},"updated":"2016-08-26 16:35:21.000000000","message":"hi, Qiming, I found this snip can be refactored.","commit_id":"43d2e1e533393790762a6b154b5f2c2b54838191"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"0582ff1ccb27759967e51636afb558706cb28e8c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            for k in regex:"},{"line_number":66,"context_line":"                if k not in data:"},{"line_number":67,"context_line":"                    return True"},{"line_number":68,"context_line":"                if not isinstance(data[k], six.string_types):"},{"line_number":69,"context_line":"                    return True"},{"line_number":70,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":71,"context_line":"                    return True"},{"line_number":72,"context_line":"        elif not isinstance(data, six.string_types):"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":75,"context_line":"            return True"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def match(self, context, publisher_id, event_type, metadata, payload):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_881be21a","line":75,"range":{"start_line":68,"start_character":16,"end_line":75,"end_character":23},"updated":"2016-08-27 11:19:16.000000000","message":"how about this:\n\n@staticmethod\ndef check_single_mismatch(data, regex):\n    if not isinstance(data, six.string_types):\n        return True\n    elif regex is not None and not regex.match(data):\n        return True\n\n@staticmethod\ndef _check_for_mismatch(data, regex):\n    if isinstance(regex, dict):\n        for k in regex:\n            if k not in data:\n                return True\n            check_single_mismatch(data[k], regex[k])\n    else:\n        check_single_mismatch(data[k], regex[k])","commit_id":"a666a3ca9c27b054dbd0efc20fb65554091f0d50"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"1b73f04d1078b1b372893aaccaed045291f47900","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            for k in regex:"},{"line_number":66,"context_line":"                if k not in data:"},{"line_number":67,"context_line":"                    return True"},{"line_number":68,"context_line":"                if not isinstance(data[k], six.string_types):"},{"line_number":69,"context_line":"                    return True"},{"line_number":70,"context_line":"                if not regex[k].match(data[k]):"},{"line_number":71,"context_line":"                    return True"},{"line_number":72,"context_line":"        elif not isinstance(data, six.string_types):"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        elif regex is not None and not regex.match(data):"},{"line_number":75,"context_line":"            return True"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def match(self, context, publisher_id, event_type, metadata, payload):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_33010207","line":75,"range":{"start_line":68,"start_character":16,"end_line":75,"end_character":23},"in_reply_to":"fa7ab95a_881be21a","updated":"2016-08-30 08:03:02.000000000","message":"Good idea in general, but incorrect implementation, so I suggest something like this:\n\n@staticmethod\ndef _check_for_single_mismatch(data, regex):\n    if regex is None: # i.e. no restrictions for data\n        return False\n    if not isinstance(data, six.string_types):\n        return True\n    if not regex.match(data):\n        return True\n    return False\n\n@staticmethod\ndef _check_for_mismatch(data, regex):\n    if isinstance(regex, dict):\n        for k in regex:\n            if k not in data:\n                return True\n            if _check_for_single_mismatch(data[k], regex[k]):\n                return True\n    else:\n        if _check_for_single_mismatch(data, regex):\n            return True\n    return False","commit_id":"a666a3ca9c27b054dbd0efc20fb65554091f0d50"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"acba4b4733afd52620b5dd603a1caf36158f64b9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                if NotificationFilter._check_for_single(data[k], regex[k]):"},{"line_number":79,"context_line":"                    return True"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            if NotificationFilter._check_for_single(data, regex):"},{"line_number":82,"context_line":"                return True"},{"line_number":83,"context_line":"        return False"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_8f7521cc","line":81,"range":{"start_line":81,"start_character":15,"end_line":81,"end_character":33},"updated":"2016-08-30 15:09:51.000000000","message":"why not self._check_for_single?","commit_id":"447b48e2342191b1521184946d350d574d416aa0"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"34ee46165e71723af045a9d8d6b198998e959e91","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                if NotificationFilter._check_for_single(data[k], regex[k]):"},{"line_number":79,"context_line":"                    return True"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            if NotificationFilter._check_for_single(data, regex):"},{"line_number":82,"context_line":"                return True"},{"line_number":83,"context_line":"        return False"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_22a24e9b","line":81,"range":{"start_line":81,"start_character":15,"end_line":81,"end_character":33},"in_reply_to":"fa7ab95a_8f7521cc","updated":"2016-08-30 22:58:51.000000000","message":"it is staticmethod ... there is not \u0027self\u0027 here.","commit_id":"447b48e2342191b1521184946d350d574d416aa0"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"dc38784bde352ef96632cc93578cce3a2d8d3a8d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _check_for_mismatch(self, data, regex):"},{"line_number":73,"context_line":"        if isinstance(regex, dict):"},{"line_number":74,"context_line":"            for k in regex:"},{"line_number":75,"context_line":"                if k not in data:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_586c9a36","line":72,"updated":"2016-08-31 06:36:20.000000000","message":"You should use \u0027@classmethod\u0027 and cls instead of self.","commit_id":"cec026698c57472458448788863fa25afce197d4"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"ee15ba21d126030c1b18e96aa761cfbc1e9d57a9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _check_for_mismatch(self, data, regex):"},{"line_number":73,"context_line":"        if isinstance(regex, dict):"},{"line_number":74,"context_line":"            for k in regex:"},{"line_number":75,"context_line":"                if k not in data:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a89bdaa_2d407456","line":72,"in_reply_to":"fa7ab95a_586c9a36","updated":"2016-09-03 14:55:55.000000000","message":"will this method be called directly by class name instead of instance?","commit_id":"cec026698c57472458448788863fa25afce197d4"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"dc38784bde352ef96632cc93578cce3a2d8d3a8d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                if self._check_for_single_mismatch(data[k], regex[k]):"},{"line_number":78,"context_line":"                    return True"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            if self._check_for_single_mismatch(data, regex):"},{"line_number":81,"context_line":"                return True"},{"line_number":82,"context_line":"        return False"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_58257a08","line":80,"updated":"2016-08-31 06:36:20.000000000","message":"the \u0027if\u0027 is useless, you can return the result directly","commit_id":"cec026698c57472458448788863fa25afce197d4"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"60de12c779620d7ec5964f77faf04508cfa8b327","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            for k in regex:"},{"line_number":76,"context_line":"                if k not in data:"},{"line_number":77,"context_line":"                    return True"},{"line_number":78,"context_line":"                if cls._check_for_single_mismatch(data[k], regex[k]):"},{"line_number":79,"context_line":"                    return True"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            return cls._check_for_single_mismatch(data, regex)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_f33aef97","line":79,"range":{"start_line":78,"start_character":16,"end_line":79,"end_character":31},"updated":"2016-08-31 06:58:25.000000000","message":"return cls._check_for_single_mismatch(data[k], regex[k])\n\nalso need to return False after for loop","commit_id":"a8616e32cc37e4a25c98544ac424fd08513f5a26"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"d7f149e919a1d57f0ea1ca9cd5aa9139d4c76a5c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            for k in regex:"},{"line_number":76,"context_line":"                if k not in data:"},{"line_number":77,"context_line":"                    return True"},{"line_number":78,"context_line":"                if cls._check_for_single_mismatch(data[k], regex[k]):"},{"line_number":79,"context_line":"                    return True"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            return cls._check_for_single_mismatch(data, regex)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_53e63b17","line":79,"range":{"start_line":78,"start_character":16,"end_line":79,"end_character":31},"in_reply_to":"fa7ab95a_f33aef97","updated":"2016-08-31 07:01:57.000000000","message":"just forget my the 1st line of my comment :)","commit_id":"a8616e32cc37e4a25c98544ac424fd08513f5a26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"2b1a450525f50d9018a4840709a043b38fdbb4cc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @classmethod"},{"line_number":73,"context_line":"    def _check_for_mismatch(cls, data, regex):"},{"line_number":74,"context_line":"        if isinstance(regex, dict):"},{"line_number":75,"context_line":"            for k in regex:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_6ec6f44a","line":72,"updated":"2016-08-31 07:32:11.000000000","message":"Only this one is classmethod other are still staticmethod because their don\u0027t use self or cls.","commit_id":"97f9efe3ca028e580e8137977324c219c5058abd"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"ca165e642656f2e53f11e57c90edd6b46d8bba04","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @classmethod"},{"line_number":73,"context_line":"    def _check_for_mismatch(cls, data, regex):"},{"line_number":74,"context_line":"        if isinstance(regex, dict):"},{"line_number":75,"context_line":"            for k in regex:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a89bdaa_cde8e819","line":72,"in_reply_to":"9a89bdaa_d287a510","updated":"2016-09-03 13:40:24.000000000","message":"It is clear that classmethods have no drawbacks over static methods, and classmethods allows the method to be called from another classmethod. You simply cannot call a staticmethod from another one unless you reference the class name directly. Referencing class name from a staticmethod looks more elegant? Not sure.","commit_id":"97f9efe3ca028e580e8137977324c219c5058abd"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"c384b50921e090af3250d83b3fdc0afcd74f9a85","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return False"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @classmethod"},{"line_number":73,"context_line":"    def _check_for_mismatch(cls, data, regex):"},{"line_number":74,"context_line":"        if isinstance(regex, dict):"},{"line_number":75,"context_line":"            for k in regex:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a89bdaa_d287a510","line":72,"in_reply_to":"fa7ab95a_6ec6f44a","updated":"2016-09-03 12:13:24.000000000","message":"Agree with Mehdi that _build_regex_dict and _check_for_single_mismatch should remain static since they don\u0027t use neither self nor cls.","commit_id":"97f9efe3ca028e580e8137977324c219c5058abd"}]}
