)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"dedf1d1e28e7b25253122e7d2e87fbee5b65ee42","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kiseok Kim \u003ckiseok7@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-20 12:43:05 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VersionedObjectDictCompat.get method occurs AttributeError."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"VersionedObjectDictCompat.get method occurs AttributeError"},{"line_number":10,"context_line":"if given key not exists and default value is not given."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a6eadb0_d9a5af04","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":59},"updated":"2016-12-20 15:16:56.000000000","message":"The title of the commit message is more than 50 chars.  There are some guidelines for dos and donts in the commit message[1].  ITOH, this title describes the error instead of the solution, maybe something like \u0027Fix get method of VesionedObjectDictCompact\u0027\n\n[1 https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure]","commit_id":"947f2b60bf23fa7514683e02c76af59a9294cba6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"dedf1d1e28e7b25253122e7d2e87fbee5b65ee42","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VersionedObjectDictCompat.get method occurs AttributeError."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"VersionedObjectDictCompat.get method occurs AttributeError"},{"line_number":10,"context_line":"if given key not exists and default value is not given."},{"line_number":11,"context_line":"Add default value None on the last elase clause."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a6eadb0_59f27fd3","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":43},"updated":"2016-12-20 15:16:56.000000000","message":"nit: s/occurs/raises","commit_id":"947f2b60bf23fa7514683e02c76af59a9294cba6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"dedf1d1e28e7b25253122e7d2e87fbee5b65ee42","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"VersionedObjectDictCompat.get method occurs AttributeError"},{"line_number":10,"context_line":"if given key not exists and default value is not given."},{"line_number":11,"context_line":"Add default value None on the last elase clause."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I69c8a7f4181750bff2ac171a10927294f763432b"},{"line_number":14,"context_line":"Closes-Bug: 1651429"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a6eadb0_b99e33b6","line":11,"range":{"start_line":11,"start_character":35,"end_line":11,"end_character":40},"updated":"2016-12-20 15:16:56.000000000","message":"s/elase/else","commit_id":"947f2b60bf23fa7514683e02c76af59a9294cba6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"96d774ce08ad8a62e7b6178113147289a0a64cdd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kiseok Kim \u003ckiseok7@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-28 12:39:54 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix get method of VesionedObjectDictCompact"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"VersionedObjectDictCompat.get method raises AttributeError"},{"line_number":10,"context_line":"if given key not exists and default value is not given."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba5201f7_99b3ad97","line":7,"updated":"2017-01-06 17:11:10.000000000","message":"s/VesionedObjectDictCompat/VersionedObjectDictCompat/ :)","commit_id":"dd70f30862aefa2fa09d04990a71783b8f730a35"}],"oslo_versionedobjects/base.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"dedf1d1e28e7b25253122e7d2e87fbee5b65ee42","unresolved":false,"context_lines":[{"line_number":767,"context_line":"                self.__class__, key))"},{"line_number":768,"context_line":"        if value !\u003d _NotSpecifiedSentinel and not self.obj_attr_is_set(key):"},{"line_number":769,"context_line":"            return value"},{"line_number":770,"context_line":"        else:"},{"line_number":771,"context_line":"            return getattr(self, key, None)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def update(self, updates):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_59919f98","line":770,"range":{"start_line":770,"start_character":8,"end_line":770,"end_character":13},"updated":"2016-12-20 15:16:56.000000000","message":"I know that this is not part of your change but this \u0027else\u0027 is not need it.  So basically, the method can be implemented like:\n\n    def get(self, key, value\u003d_NotSpecifiedSentinel):\n        if key not in self.obj_fields:\n            raise AttributeError(\"\u0027%s\u0027 object has no attribute \u0027%s\u0027\" % (\n                self.__class__, key))\n        if value !\u003d _NotSpecifiedSentinel and not self.obj_attr_is_set(key):\n            return value\n        return getattr(self, key, None)","commit_id":"947f2b60bf23fa7514683e02c76af59a9294cba6"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"96d774ce08ad8a62e7b6178113147289a0a64cdd","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        if value !\u003d _NotSpecifiedSentinel and not self.obj_attr_is_set(key):"},{"line_number":769,"context_line":"            return value"},{"line_number":770,"context_line":"        else:"},{"line_number":771,"context_line":"            return getattr(self, key, None)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def update(self, updates):"},{"line_number":774,"context_line":"        for key, value in updates.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_a4fcc8b8","line":771,"updated":"2017-01-06 17:11:10.000000000","message":"While this seems innocuous, I have a feeling that this was left this way on purpose... if an object\u0027s attribute has not been set, we specifically do *not* want to return a default value of None, because there would be no way to indicate that the attribute has not been set.\n\nIn other words, a caller can currently do:\n\n some_dict_compat_obj.get(key, None)\n\nand the behaviour will be precisely what you expect. However, with this patch, there would be no way for the caller to determine if the key is an attribute that has been set on the object...","commit_id":"dd70f30862aefa2fa09d04990a71783b8f730a35"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"393f01790dedb71d26f803f73c2f02bfe99c42c0","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        if value !\u003d _NotSpecifiedSentinel and not self.obj_attr_is_set(key):"},{"line_number":769,"context_line":"            return value"},{"line_number":770,"context_line":"        else:"},{"line_number":771,"context_line":"            return getattr(self, key, None)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def update(self, updates):"},{"line_number":774,"context_line":"        for key, value in updates.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_64b3c00a","line":771,"in_reply_to":"ba5201f7_a4fcc8b8","updated":"2017-01-06 17:12:54.000000000","message":"This ^","commit_id":"dd70f30862aefa2fa09d04990a71783b8f730a35"}],"oslo_versionedobjects/tests/test_objects.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"15033c1f7237b58be8cca86c50401d7d91367d67","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"        # ...even with a default"},{"line_number":1075,"context_line":"        self.assertRaises(AttributeError, obj.get, \u0027nothing\u0027, 3)"},{"line_number":1076,"context_line":"        # Foo without a default, should None"},{"line_number":1077,"context_line":"        self.assertEqual(obj3.get(\u0027foo\u0027), None)"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def test_object_inheritance(self):"},{"line_number":1080,"context_line":"        base_fields \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_daa8e779","line":1077,"range":{"start_line":1077,"start_character":1,"end_line":1077,"end_character":47},"updated":"2016-12-28 10:31:40.000000000","message":"Use self.assertIsNone(obj3.get(\u0027foo\u0027))","commit_id":"6ea10d49011aa4c71361c6f9aa0a145085793bd4"}]}
