)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8cf27caae8933ff24dddee8d617fb2c14c068085","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Then subsequent patches will replace the duplicated sample data"},{"line_number":23,"context_line":"with references to common sample fragments."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This proposed resolved supports resolving the refs recursively so"},{"line_number":26,"context_line":"a referenced json fragment can reference further fragments. However"},{"line_number":27,"context_line":"the current implementation does not handle reference loops."},{"line_number":28,"context_line":"The resolver also supports overriding parts of the referenced"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3f4b6375_2e999d1e","line":25,"range":{"start_line":25,"start_character":14,"end_line":25,"end_character":22},"updated":"2017-10-30 20:45:40.000000000","message":"resolver","commit_id":"c370c42d274270c19efb25407978b718cd1b5d03"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01b31d8a6fa49df24dd9b680a5c757c0f51dbf41","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Factor out duplicated notification sample data"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Versioned notifications are functionally tested against stored sample"},{"line_number":10,"context_line":"data. Also most of the instance notitication shares payload structure."},{"line_number":11,"context_line":"Today we store a separate sample for every instance notification."},{"line_number":12,"context_line":"These samples store similar, mostly redundant data. When a new field"},{"line_number":13,"context_line":"is added to the InstancePayload then every instance notification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1f485f77_2dbc1504","line":10,"range":{"start_line":10,"start_character":32,"end_line":10,"end_character":44},"updated":"2017-11-11 00:31:43.000000000","message":"notification","commit_id":"5a5155ea4e4e3ade01e89a8c221ccd73fe1827b9"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8cf27caae8933ff24dddee8d617fb2c14c068085","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            sample_data \u003d sample.read()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        sample_obj \u003d jsonutils.loads(sample_data)"},{"line_number":142,"context_line":"        sample_base_dir \u003d sample_file[0:len(sample_file) -"},{"line_number":143,"context_line":"                                        (len(sample_file_name) + 5)]"},{"line_number":144,"context_line":"        sample_obj \u003d json_ref.resolve_refs("},{"line_number":145,"context_line":"            sample_obj, base_path\u003dsample_base_dir)"},{"line_number":146,"context_line":"        self._apply_replacements(replacements, sample_obj, notification)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_a93c67bf","line":143,"range":{"start_line":142,"start_character":8,"end_line":143,"end_character":68},"updated":"2017-10-30 20:45:40.000000000","message":"Unless I\u0027m mistaken, you could just do:\n\n sample_base_dir \u003d os.path.dirname(sample_file)\n\n?","commit_id":"c370c42d274270c19efb25407978b718cd1b5d03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"84c57ffeb3a4b5b087d347ace1bb60d08c2c94e1","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            sample_data \u003d sample.read()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        sample_obj \u003d jsonutils.loads(sample_data)"},{"line_number":142,"context_line":"        sample_base_dir \u003d sample_file[0:len(sample_file) -"},{"line_number":143,"context_line":"                                        (len(sample_file_name) + 5)]"},{"line_number":144,"context_line":"        sample_obj \u003d json_ref.resolve_refs("},{"line_number":145,"context_line":"            sample_obj, base_path\u003dsample_base_dir)"},{"line_number":146,"context_line":"        self._apply_replacements(replacements, sample_obj, notification)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f4b6375_5897e291","line":143,"range":{"start_line":142,"start_character":8,"end_line":143,"end_character":68},"in_reply_to":"3f4b6375_a93c67bf","updated":"2017-10-31 15:44:32.000000000","message":"Good catch. Done.","commit_id":"c370c42d274270c19efb25407978b718cd1b5d03"}],"nova/tests/json_ref.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1f49a0fa7c141c0ba2b4440a5eb122c82601a1bb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    if json_path:"},{"line_number":23,"context_line":"        raise NotImplementedError(\u0027JSON refs with JSON path after the \"#\" is\u0027"},{"line_number":24,"context_line":"                                  \u0027not yet supported\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # binary mode is needed due to bug/1515231"},{"line_number":27,"context_line":"    with open(base_path + file_path, \u0027r+b\u0027) as f:"},{"line_number":28,"context_line":"        ref_value \u003d jsonutils.load(f)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f4b6375_54343f4a","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":0},"updated":"2017-11-01 02:37:32.000000000","message":"need to append \u0027/\u0027 for file_path as per path you are mentioning in sample files[1]\n\nfile_path \u003d \u0027/\u0027 + file_path\n\nThis can cover for embedded ref file also like {\"$ref\": \"BlockDevicePayload.json#\"} in InstanceActionPayload.json\n\n..1 https://review.openstack.org/#/c/452819/14/doc/notification_samples/instance-delete-end.json","commit_id":"2b82bc78980bf56043c068b07f398144f858942a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"898d534f80109df8793ee9716110b963f230795c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    if json_path:"},{"line_number":23,"context_line":"        raise NotImplementedError(\u0027JSON refs with JSON path after the \"#\" is\u0027"},{"line_number":24,"context_line":"                                  \u0027not yet supported\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # binary mode is needed due to bug/1515231"},{"line_number":27,"context_line":"    with open(base_path + file_path, \u0027r+b\u0027) as f:"},{"line_number":28,"context_line":"        ref_value \u003d jsonutils.load(f)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f4b6375_2cef091f","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":0},"in_reply_to":"3f4b6375_54343f4a","updated":"2017-11-02 15:06:14.000000000","message":"Yeah, it is actually visible below that the recursive call adds the extra / at the end when descending down. I missed that in the first call. Actually I should use os.path.join all the time as the path handling is OS dependent.\nDone.","commit_id":"2b82bc78980bf56043c068b07f398144f858942a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01b31d8a6fa49df24dd9b680a5c757c0f51dbf41","unresolved":false,"context_lines":[{"line_number":20,"context_line":"def _resolve_ref(ref, base_path):"},{"line_number":21,"context_line":"    file_path, _, json_path \u003d ref.partition(\u0027#\u0027)"},{"line_number":22,"context_line":"    if json_path:"},{"line_number":23,"context_line":"        raise NotImplementedError(\u0027JSON refs with JSON path after the \"#\" is\u0027"},{"line_number":24,"context_line":"                                  \u0027not yet supported\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    path \u003d os.path.join(base_path, file_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1f485f77_cd0ea1e4","line":23,"range":{"start_line":23,"start_character":14,"end_line":23,"end_character":33},"updated":"2017-11-11 00:31:43.000000000","message":"Doesn\u0027t look like we have a test for this, but maybe it gets updated later in the series? Otherwise could just add a test on top.","commit_id":"5a5155ea4e4e3ade01e89a8c221ccd73fe1827b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7fe0665053a84e1131d51e3e0a00dc5335cb7b91","unresolved":false,"context_lines":[{"line_number":20,"context_line":"def _resolve_ref(ref, base_path):"},{"line_number":21,"context_line":"    file_path, _, json_path \u003d ref.partition(\u0027#\u0027)"},{"line_number":22,"context_line":"    if json_path:"},{"line_number":23,"context_line":"        raise NotImplementedError(\u0027JSON refs with JSON path after the \"#\" is\u0027"},{"line_number":24,"context_line":"                                  \u0027not yet supported\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    path \u003d os.path.join(base_path, file_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff82abbf_513ddb8c","line":23,"range":{"start_line":23,"start_character":14,"end_line":23,"end_character":33},"in_reply_to":"1f485f77_cd0ea1e4","updated":"2017-11-28 14:59:00.000000000","message":"Missing test case added in https://review.openstack.org/#/c/523432/","commit_id":"5a5155ea4e4e3ade01e89a8c221ccd73fe1827b9"}],"nova/tests/unit/test_json_ref.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01b31d8a6fa49df24dd9b680a5c757c0f51dbf41","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        actual \u003d json_ref.resolve_refs("},{"line_number":63,"context_line":"            {\u0027foo\u0027: 1,"},{"line_number":64,"context_line":"             \u0027bar\u0027: {\u0027$ref\u0027: \u0027another.json#\u0027}},"},{"line_number":65,"context_line":"            \u0027some/base/path/\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.assertDictEqual({\u0027foo\u0027: 1,"},{"line_number":68,"context_line":"                              \u0027bar\u0027: {\u0027baz\u0027: 13}},"}],"source_content_type":"text/x-python","patch_set":16,"id":"1f485f77_2d6ad57f","line":65,"updated":"2017-11-11 00:31:43.000000000","message":"nit: alignment","commit_id":"5a5155ea4e4e3ade01e89a8c221ccd73fe1827b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7fe0665053a84e1131d51e3e0a00dc5335cb7b91","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        actual \u003d json_ref.resolve_refs("},{"line_number":63,"context_line":"            {\u0027foo\u0027: 1,"},{"line_number":64,"context_line":"             \u0027bar\u0027: {\u0027$ref\u0027: \u0027another.json#\u0027}},"},{"line_number":65,"context_line":"            \u0027some/base/path/\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.assertDictEqual({\u0027foo\u0027: 1,"},{"line_number":68,"context_line":"                              \u0027bar\u0027: {\u0027baz\u0027: 13}},"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff82abbf_f1a3cffe","line":65,"in_reply_to":"1f485f77_2d6ad57f","updated":"2017-11-28 14:59:00.000000000","message":"it is properly aligned, as \u0027some/base/path\u0027 is another param of resolve_refs not a key in the dict","commit_id":"5a5155ea4e4e3ade01e89a8c221ccd73fe1827b9"}],"test-requirements.txt":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6c8ea9de2dd4fe3efe838b7f74ddacc756f2da3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"bandit\u003e\u003d1.1.0 # Apache-2.0"},{"line_number":28,"context_line":"openstackdocstheme\u003e\u003d1.5.0 # Apache-2.0"},{"line_number":29,"context_line":"gabbi\u003e\u003d1.26.1 # Apache-2.0"},{"line_number":30,"context_line":"jsonref\u003e\u003d0.1 # MIT"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# vmwareapi driver specific dependencies"},{"line_number":33,"context_line":"oslo.vmware\u003e\u003d2.17.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"7ffa3b31_e3d144fd","line":30,"updated":"2017-04-18 18:20:07.000000000","message":"As discussed in today\u0027s notifications meeting, I think we need to work on an in-tree simple implementation for the same thing, since this library is no longer maintained, which means getting it accepted into openstack/requirements could be hard.","commit_id":"77a29dd5f83db3e6a09b585eea557642175b1cb3"}]}
