)]}'
{"cinderlib/serialization.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":167,"context_line":"    properly parsed."},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":"    st \u003d value.strftime(\u0027%Y-%m-%dT%H:%M:%S.%f\u0027)"},{"line_number":170,"context_line":"    tz \u003d value.tzinfo.tzname(None) if value.tzinfo else \u0027UTC\u0027"},{"line_number":171,"context_line":"    # Need to handle either iso8601 or python UTC format"},{"line_number":172,"context_line":"    st +\u003d (\u0027Z\u0027 if tz in [\u0027UTC\u0027, \u0027UTC+00:00\u0027] else tz)"},{"line_number":173,"context_line":"    return st"}],"source_content_type":"text/x-python","patch_set":1,"id":"9495eabd_646dcc30","line":170,"range":{"start_line":170,"start_character":29,"end_line":170,"end_character":33},"updated":"2021-06-29 10:52:38.000000000","message":"I\u0027m not sure if this is same as datetime.tzname() so i will ask why do we need to pass None here?","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"953e4005dbc2a746585069d656b744961cfbfad4","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    properly parsed."},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":"    st \u003d value.strftime(\u0027%Y-%m-%dT%H:%M:%S.%f\u0027)"},{"line_number":170,"context_line":"    tz \u003d value.tzinfo.tzname(None) if value.tzinfo else \u0027UTC\u0027"},{"line_number":171,"context_line":"    # Need to handle either iso8601 or python UTC format"},{"line_number":172,"context_line":"    st +\u003d (\u0027Z\u0027 if tz in [\u0027UTC\u0027, \u0027UTC+00:00\u0027] else tz)"},{"line_number":173,"context_line":"    return st"}],"source_content_type":"text/x-python","patch_set":1,"id":"6f35c3cf_ca149182","line":170,"range":{"start_line":170,"start_character":29,"end_line":170,"end_character":33},"in_reply_to":"1622f642_a8e9fd17","updated":"2021-06-29 12:34:34.000000000","message":"Ack","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":true,"context_lines":[{"line_number":167,"context_line":"    properly parsed."},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":"    st \u003d value.strftime(\u0027%Y-%m-%dT%H:%M:%S.%f\u0027)"},{"line_number":170,"context_line":"    tz \u003d value.tzinfo.tzname(None) if value.tzinfo else \u0027UTC\u0027"},{"line_number":171,"context_line":"    # Need to handle either iso8601 or python UTC format"},{"line_number":172,"context_line":"    st +\u003d (\u0027Z\u0027 if tz in [\u0027UTC\u0027, \u0027UTC+00:00\u0027] else tz)"},{"line_number":173,"context_line":"    return st"}],"source_content_type":"text/x-python","patch_set":1,"id":"1622f642_a8e9fd17","line":170,"range":{"start_line":170,"start_character":29,"end_line":170,"end_character":33},"in_reply_to":"9495eabd_646dcc30","updated":"2021-06-29 12:07:06.000000000","message":"I don\u0027t want to diverge from the original code that was being executed [1][2], I only modified the formatting string on L169, left the rest as it is. \n\n[1]: https://github.com/openstack/oslo.versionedobjects/blob/4d5d360da980ca4a0b8ee59a6edb2b591286263f/oslo_versionedobjects/fields.py#L495-L497\n[2]: https://github.com/openstack/oslo.versionedobjects/blob/4d5d360da980ca4a0b8ee59a6edb2b591286263f/oslo_versionedobjects/_utils.py#L24-L30","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"}],"cinderlib/tests/unit/test_serialization.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":23,"context_line":"    def test_vol_to_and_from(self):"},{"line_number":24,"context_line":"        vol \u003d objects.Volume(self.backend, size\u003d10)"},{"line_number":25,"context_line":"        json_data \u003d vol.json"},{"line_number":26,"context_line":"        objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":29,"context_line":"        self.assertEqual(json_data, vol.to_json(simplified\u003dFalse))"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b02cada_fc3b20f6","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":42},"updated":"2021-06-29 10:52:38.000000000","message":"I don\u0027t think we need this?","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def test_vol_to_and_from(self):"},{"line_number":24,"context_line":"        vol \u003d objects.Volume(self.backend, size\u003d10)"},{"line_number":25,"context_line":"        json_data \u003d vol.json"},{"line_number":26,"context_line":"        objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":29,"context_line":"        self.assertEqual(json_data, vol.to_json(simplified\u003dFalse))"}],"source_content_type":"text/x-python","patch_set":1,"id":"927fd970_45e7dcdc","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":42},"in_reply_to":"8b02cada_fc3b20f6","updated":"2021-06-29 12:07:06.000000000","message":"The idea was to ensure serialization also covered the snapshots, but I left this halfway, fixing it now.","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":25,"context_line":"        json_data \u003d vol.json"},{"line_number":26,"context_line":"        objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":29,"context_line":"        self.assertEqual(json_data, vol.to_json(simplified\u003dFalse))"},{"line_number":30,"context_line":"        vol2 \u003d objects.Volume.load(json_data)"},{"line_number":31,"context_line":"        self.assertEqual(vol.json, vol2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c8dd9f6_1a2d1c27","line":28,"range":{"start_line":28,"start_character":40,"end_line":28,"end_character":49},"updated":"2021-06-29 10:52:38.000000000","message":"nit: equivalent","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        json_data \u003d vol.json"},{"line_number":26,"context_line":"        objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":29,"context_line":"        self.assertEqual(json_data, vol.to_json(simplified\u003dFalse))"},{"line_number":30,"context_line":"        vol2 \u003d objects.Volume.load(json_data)"},{"line_number":31,"context_line":"        self.assertEqual(vol.json, vol2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"20b292e1_abcacdf8","line":28,"range":{"start_line":28,"start_character":27,"end_line":28,"end_character":36},"updated":"2021-06-29 12:07:06.000000000","message":"nit: property","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        json_data \u003d vol.json"},{"line_number":26,"context_line":"        objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":29,"context_line":"        self.assertEqual(json_data, vol.to_json(simplified\u003dFalse))"},{"line_number":30,"context_line":"        vol2 \u003d objects.Volume.load(json_data)"},{"line_number":31,"context_line":"        self.assertEqual(vol.json, vol2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"29b1fe1c_fd10fbf3","line":28,"range":{"start_line":28,"start_character":40,"end_line":28,"end_character":49},"in_reply_to":"0c8dd9f6_1a2d1c27","updated":"2021-06-29 12:07:06.000000000","message":"Done","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        snap \u003d objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":36,"context_line":"        json_data \u003d snap.json"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":39,"context_line":"        self.assertEqual(json_data, snap.to_json(simplified\u003dFalse))"},{"line_number":40,"context_line":"        snap2 \u003d objects.Snapshot.load(json_data)"},{"line_number":41,"context_line":"        self.assertEqual(snap.json, snap2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6953dae3_f0bfd6e5","line":38,"range":{"start_line":38,"start_character":40,"end_line":38,"end_character":49},"updated":"2021-06-29 10:52:38.000000000","message":"nit: equivalent","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        snap \u003d objects.Snapshot(vol, name\u003d\u0027disk\u0027)"},{"line_number":36,"context_line":"        json_data \u003d snap.json"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":39,"context_line":"        self.assertEqual(json_data, snap.to_json(simplified\u003dFalse))"},{"line_number":40,"context_line":"        snap2 \u003d objects.Snapshot.load(json_data)"},{"line_number":41,"context_line":"        self.assertEqual(snap.json, snap2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e2c0ef4_06ec9959","line":38,"range":{"start_line":38,"start_character":40,"end_line":38,"end_character":49},"in_reply_to":"6953dae3_f0bfd6e5","updated":"2021-06-29 12:07:06.000000000","message":"Done","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                                  connection_info\u003d{\u0027conn\u0027: {\u0027data\u0027: {}}})"},{"line_number":47,"context_line":"        json_data \u003d conn.json"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":50,"context_line":"        self.assertEqual(json_data, conn.to_json(simplified\u003dFalse))"},{"line_number":51,"context_line":"        conn2 \u003d objects.Connection.load(json_data)"},{"line_number":52,"context_line":"        self.assertEqual(conn.json, conn2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"09b91f64_69238230","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":49},"updated":"2021-06-29 10:52:38.000000000","message":"nit: equivalent","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                  connection_info\u003d{\u0027conn\u0027: {\u0027data\u0027: {}}})"},{"line_number":47,"context_line":"        json_data \u003d conn.json"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Confirm vol.json propoerty is quivalent to the non simplified version"},{"line_number":50,"context_line":"        self.assertEqual(json_data, conn.to_json(simplified\u003dFalse))"},{"line_number":51,"context_line":"        conn2 \u003d objects.Connection.load(json_data)"},{"line_number":52,"context_line":"        self.assertEqual(conn.json, conn2.json)"}],"source_content_type":"text/x-python","patch_set":1,"id":"614f5cdc_2e2c760a","line":49,"range":{"start_line":49,"start_character":40,"end_line":49,"end_character":49},"in_reply_to":"09b91f64_69238230","updated":"2021-06-29 12:07:06.000000000","message":"Done","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"37b825bc8a7e8de7387215405039ee93922f0d22","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        self.assertEqual(microsecond, vol2.created_at.microsecond)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_datetime_non_subsecond(self):"},{"line_number":67,"context_line":"        \"\"\"Test rehidration of DateTime field without microsecond.\"\"\""},{"line_number":68,"context_line":"        vol \u003d objects.Volume(self.backend, size\u003d1, name\u003d\u0027disk\u0027)"},{"line_number":69,"context_line":"        vol._ovo.created_at \u003d vol.created_at.replace(microsecond\u003d123456)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a65d98e3_8f72fa30","line":67,"range":{"start_line":67,"start_character":16,"end_line":67,"end_character":27},"updated":"2021-06-29 10:52:38.000000000","message":"rehydration?","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c219feee6b0efdd17af2696405e863a9d3d76f61","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertEqual(microsecond, vol2.created_at.microsecond)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_datetime_non_subsecond(self):"},{"line_number":67,"context_line":"        \"\"\"Test rehidration of DateTime field without microsecond.\"\"\""},{"line_number":68,"context_line":"        vol \u003d objects.Volume(self.backend, size\u003d1, name\u003d\u0027disk\u0027)"},{"line_number":69,"context_line":"        vol._ovo.created_at \u003d vol.created_at.replace(microsecond\u003d123456)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e2f06584_e235d69c","line":67,"range":{"start_line":67,"start_character":16,"end_line":67,"end_character":27},"in_reply_to":"a65d98e3_8f72fa30","updated":"2021-06-29 12:07:06.000000000","message":"Done","commit_id":"80c00267e4a76ab0ec7f005b2d22700750cb7da2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6d77e3dabc4fc1415f2440e18fe776a92fb221f5","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        vol._snapshots \u003d None"},{"line_number":29,"context_line":"        with mock.patch.object(vol.persistence, \u0027get_snapshots\u0027,"},{"line_number":30,"context_line":"                               return_value\u003d[snap]):"},{"line_number":31,"context_line":"            vol.snapshots"},{"line_number":32,"context_line":"        self.assertEqual(1, len(vol.snapshots))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        json_data \u003d vol.json"}],"source_content_type":"text/x-python","patch_set":2,"id":"36cab3de_58a139c5","line":31,"range":{"start_line":31,"start_character":12,"end_line":31,"end_character":25},"updated":"2021-06-29 12:46:49.000000000","message":"Just curious about this ... you need to evaluate this expression within the context of the mock patch the first time, i get that.  Is there a reason why you didn\u0027t instead just move the assert at line 32 into the context, so you wouldn\u0027t need line 31 anymore?","commit_id":"026784b949d7115c519d5ec7bf1a763188ff1032"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"18535d73d4e42995b5357162ff2284114470eae8","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        vol._snapshots \u003d None"},{"line_number":29,"context_line":"        with mock.patch.object(vol.persistence, \u0027get_snapshots\u0027,"},{"line_number":30,"context_line":"                               return_value\u003d[snap]):"},{"line_number":31,"context_line":"            vol.snapshots"},{"line_number":32,"context_line":"        self.assertEqual(1, len(vol.snapshots))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        json_data \u003d vol.json"}],"source_content_type":"text/x-python","patch_set":2,"id":"970dcf8e_2facc15c","line":31,"range":{"start_line":31,"start_character":12,"end_line":31,"end_character":25},"in_reply_to":"36cab3de_58a139c5","updated":"2021-06-29 12:52:05.000000000","message":"We can do both L32 and L31 together, but I wanted to keep the ideas behind each action separated, as I see them as 2 different things:\n\n- On L31 we are filling the internal \"_snapshots\" attribute of the Volume instance as well as the \"snapshots\" attribute of the \"_ovo\" attribute.\n\n- And on L32 we do a confirmation that we have 1 snapshot just so it\u0027s clear that on L40 after rehydration we have the same.","commit_id":"026784b949d7115c519d5ec7bf1a763188ff1032"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"72d8501d4982d785c01a82a446604c8b1f9a7974","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        vol._snapshots \u003d None"},{"line_number":29,"context_line":"        with mock.patch.object(vol.persistence, \u0027get_snapshots\u0027,"},{"line_number":30,"context_line":"                               return_value\u003d[snap]):"},{"line_number":31,"context_line":"            vol.snapshots"},{"line_number":32,"context_line":"        self.assertEqual(1, len(vol.snapshots))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        json_data \u003d vol.json"}],"source_content_type":"text/x-python","patch_set":2,"id":"4fa1729a_2053aebb","line":31,"range":{"start_line":31,"start_character":12,"end_line":31,"end_character":25},"in_reply_to":"970dcf8e_2facc15c","updated":"2021-06-29 13:02:35.000000000","message":"That makes perfect sense.  I thought it was a test style issue, but wanted to ask in case there was something else going on.","commit_id":"026784b949d7115c519d5ec7bf1a763188ff1032"}],"releasenotes/notes/datetime-subsecond-e123e8d2dda707ea.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6d77e3dabc4fc1415f2440e18fe776a92fb221f5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #1933964 \u003chttps://bugs.launchpad.net/cinder/+bug/1933964\u003e`_: Fixed"},{"line_number":5,"context_line":"    date time fields losing subsecond resolution on serialization."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e8ec8086_eea8f26b","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":13},"updated":"2021-06-29 12:46:49.000000000","message":"super nit: this could be one word","commit_id":"026784b949d7115c519d5ec7bf1a763188ff1032"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"18535d73d4e42995b5357162ff2284114470eae8","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #1933964 \u003chttps://bugs.launchpad.net/cinder/+bug/1933964\u003e`_: Fixed"},{"line_number":5,"context_line":"    date time fields losing subsecond resolution on serialization."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ecab8221_bcfcb6a2","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":13},"in_reply_to":"e8ec8086_eea8f26b","updated":"2021-06-29 12:52:05.000000000","message":"Will fix if I submit a new patch.","commit_id":"026784b949d7115c519d5ec7bf1a763188ff1032"}]}
