)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"7e039fbb16d66538a143a66395f5b5712ca47672","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Max Lobur \u003cmax_lobur@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-02-14 13:15:56 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix JSONEncodedDict default values"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change JSONEncodedDict default values from \u0027{}\u0027 strings to dicts"},{"line_number":10,"context_line":"to make the interface consistent. Also enforce type checking to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAUX%2F%2FAEc%3D","line":7,"updated":"2014-02-17 18:02:41.000000000","message":"commit message does not reflect current code","commit_id":"7c8681baf60381aed5d831c6176b936670678c20"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c0f7a14c81147fcc2036e166f3796655ddd1d24a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":58,"context_line":"        if value is None:"},{"line_number":59,"context_line":"            # Save empty dict by default to make the interface the consistent."},{"line_number":60,"context_line":"            value \u003d dict()"},{"line_number":61,"context_line":"        serialized_value \u003d json.dumps(value)"},{"line_number":62,"context_line":"        return serialized_value"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FXNg%3D","line":60,"updated":"2014-02-13 18:06:25.000000000","message":"One problem here, considering that all None values are a dict is kinda misleading because json also can encode lists:\n\nIn [2]: json.loads(\"[]\")\nOut[2]: []\n\nIn [3]: json.loads(\"{}\")\nOut[3]: {}\n\nIn [9]: json.dumps([])\nOut[9]: \u0027[]\u0027\n\nIn [10]: json.dumps({})\nOut[10]: \u0027{}\u0027\n\nIn [4]: json.loads(\"()\")\n---------------------------------------------------------------------------\nValueError                                Traceback (most recent call last)\n\u003cipython-input-4-c0bfa98455cb\u003e in \u003cmodule\u003e()\n----\u003e 1 json.loads(\"()\")\n\n/usr/lib64/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\n    336             parse_int is None and parse_float is None and\n    337             parse_constant is None and object_pairs_hook is None and not kw):\n--\u003e 338         return _default_decoder.decode(s)\n    339     if cls is None:\n    340         cls \u003d JSONDecoder\n\n/usr/lib64/python2.7/json/decoder.pyc in decode(self, s, _w)\n    363 \n    364         \"\"\"\n--\u003e 365         obj, end \u003d self.raw_decode(s, idx\u003d_w(s, 0).end())\n    366         end \u003d _w(s, end).end()\n    367         if end !\u003d len(s):\n\n/usr/lib64/python2.7/json/decoder.pyc in raw_decode(self, s, idx)\n    381             obj, end \u003d self.scan_once(s, idx)\n    382         except StopIteration:\n--\u003e 383             raise ValueError(\"No JSON object could be decoded\")\n    384         return obj, end\n\nValueError: No JSON object could be decoded","commit_id":"763ef0c4a37fc7956ca25b96f59316b92039f8ef"}],"ironic/tests/db/sqlalchemy/test_types.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"fee486b27280f6d8bcdab54f39b6b3b180eea8a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.dbapi.create_chassis({\u0027uuid\u0027: ch1_id})"},{"line_number":35,"context_line":"        # Get chassis manually to test SA types in isolation from UOM."},{"line_number":36,"context_line":"        ch1 \u003d sa_api.model_query(models.Chassis).filter_by(uuid\u003dch1_id).one()"},{"line_number":37,"context_line":"        self.assertDictEqual({}, ch1.extra)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # create chassis with extra specified."},{"line_number":40,"context_line":"        ch2_id \u003d ironic_utils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BF1I%3D","line":37,"updated":"2014-01-30 08:04:25.000000000","message":"This asseertDircEqual() method is new in Python 2.7, so suggest use base assertEqual() compatible method as below:\n\n    self.assertEqual({}, ch1.extra)","commit_id":"d8853a3c573bbf901603ad243d0ca335b5c6d955"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"f75c1d2647c23e259abfd4aadd4e79de5813f229","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.dbapi.create_chassis({\u0027uuid\u0027: ch1_id})"},{"line_number":35,"context_line":"        # Get chassis manually to test SA types in isolation from UOM."},{"line_number":36,"context_line":"        ch1 \u003d sa_api.model_query(models.Chassis).filter_by(uuid\u003dch1_id).one()"},{"line_number":37,"context_line":"        self.assertDictEqual({}, ch1.extra)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # create chassis with extra specified."},{"line_number":40,"context_line":"        ch2_id \u003d ironic_utils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BFAI%3D","line":37,"in_reply_to":"AAAAUH%2F%2BF1I%3D","updated":"2014-01-30 11:56:43.000000000","message":"Indeed! I just noticed that in logs too! Thanks for your help","commit_id":"d8853a3c573bbf901603ad243d0ca335b5c6d955"}]}
