)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"c32274d9c7fab628a2f0cba5d8f179e51f62206b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-12-17 16:08:40 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds json sample for the versioned notifications"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially-Implements: bp versioned-notification-api"},{"line_number":10,"context_line":"Change-Id: I3a70b7b5d6d427611a9d2c1610e0d55aff88f0e8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a7e1126_bae8a6e3","line":8,"updated":"2015-12-17 16:02:28.000000000","message":"You should probably add something here for a description...","commit_id":"0c11fd3c2ef1903a56600fac3c57fbc80405fccd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f45d7c7fe5a8785d3e9416bb7d8406975cf37f05","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-12-17 16:08:40 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds json sample for the versioned notifications"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially-Implements: bp versioned-notification-api"},{"line_number":10,"context_line":"Change-Id: I3a70b7b5d6d427611a9d2c1610e0d55aff88f0e8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a7e1126_9019097c","line":8,"in_reply_to":"3a7e1126_bae8a6e3","updated":"2015-12-17 16:21:00.000000000","message":"Done","commit_id":"0c11fd3c2ef1903a56600fac3c57fbc80405fccd"}],"doc/notification_samples/service-update.json":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9c6f4cbecafcb9e0d120b0317e3fdf907a4fb6a1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"nova_object.data\":{"},{"line_number":8,"context_line":"            \"host\":\"host1\","},{"line_number":9,"context_line":"            \"disabled\":false,"},{"line_number":10,"context_line":"            \"last_seen_up\":null,"},{"line_number":11,"context_line":"            \"binary\":\"nova-compute\","},{"line_number":12,"context_line":"            \"topic\":\"compute\","},{"line_number":13,"context_line":"            \"disabled_reason\":null,"}],"source_content_type":"application/json","patch_set":25,"id":"da6ed579_ed774138","line":10,"updated":"2016-01-13 12:09:00.000000000","message":"It would be good to define the date format, I feel.","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e15d33350f3902f8adfce7ddc599dd2d97bcb1e4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        \"nova_object.data\":{"},{"line_number":8,"context_line":"            \"host\":\"host1\","},{"line_number":9,"context_line":"            \"disabled\":false,"},{"line_number":10,"context_line":"            \"last_seen_up\":null,"},{"line_number":11,"context_line":"            \"binary\":\"nova-compute\","},{"line_number":12,"context_line":"            \"topic\":\"compute\","},{"line_number":13,"context_line":"            \"disabled_reason\":null,"}],"source_content_type":"application/json","patch_set":25,"id":"da6ed579_f6baad09","line":10,"in_reply_to":"da6ed579_ed774138","updated":"2016-01-13 15:06:26.000000000","message":"Good point. Done.","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"40b2f6f5e2f8e604fce20f2c549f974c4c281f05","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"priority\":\"INFO\","},{"line_number":3,"context_line":"    \"payload\":{"},{"line_number":4,"context_line":"        \"nova_object.namespace\":\"nova\","},{"line_number":5,"context_line":"        \"nova_object.name\":\"ServiceStatusPayload\","}],"source_content_type":"application/json","patch_set":30,"id":"ba63e191_b073114d","line":2,"updated":"2016-01-19 11:59:50.000000000","message":"It would be better to add a white space after \u0027:\u0027.","commit_id":"aa354033e54332e08ed90296d24c0ff3af689967"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4d51f0ff6f11b89934eb85e2831888802b70c280","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"priority\":\"INFO\","},{"line_number":3,"context_line":"    \"payload\":{"},{"line_number":4,"context_line":"        \"nova_object.namespace\":\"nova\","},{"line_number":5,"context_line":"        \"nova_object.name\":\"ServiceStatusPayload\","}],"source_content_type":"application/json","patch_set":30,"id":"ba63e191_b931bd0d","line":2,"in_reply_to":"ba63e191_b073114d","updated":"2016-01-19 12:46:48.000000000","message":"Done","commit_id":"aa354033e54332e08ed90296d24c0ff3af689967"}],"nova/tests/functional/api/client.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"cbf0b9ea57d1472f2fa80f83f2131638d329ef0b","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            kwargs[\u0027body\u0027] \u003d jsonutils.dumps(body)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        if api_version:"},{"line_number":221,"context_line":"            headers \u003d kwargs.setdefault(\u0027headers\u0027, {})"},{"line_number":222,"context_line":"            headers[\u0027X-OpenStack-Nova-API-Version\u0027] \u003d api_version"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        kwargs.setdefault(\u0027check_response_status\u0027, [200, 202, 204])"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a5de9d1_7521effa","line":221,"updated":"2016-01-28 14:02:07.000000000","message":"nit: we don\u0027t need that line","commit_id":"d19a22de6fc40bfbb34ad577ee2d85fdb5429c6b"}],"nova/tests/functional/api_sample_tests/test_services.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"d9883eabf753d4f98ac100c7481eaeb2f51381bd","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                api_version\u003dself.microversion)"},{"line_number":95,"context_line":"        self._verify_response(\u0027service-disable-put-resp\u0027, subs, response, 200)"},{"line_number":96,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":97,"context_line":"                                  {\u0027disabled\u0027: True})"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_service_disable_log_reason(self):"},{"line_number":100,"context_line":"        \"\"\"Disable an existing service and log the reason.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_b153b8e1","line":97,"updated":"2015-12-16 16:57:57.000000000","message":"I would put replacements\u003d{\u0027disabled\u0027: True} here. I got confused as to what the extra arg was doing.","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d83b076f91de708dd09973612dae8815c8062afe","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                api_version\u003dself.microversion)"},{"line_number":95,"context_line":"        self._verify_response(\u0027service-disable-put-resp\u0027, subs, response, 200)"},{"line_number":96,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":97,"context_line":"                                  {\u0027disabled\u0027: True})"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_service_disable_log_reason(self):"},{"line_number":100,"context_line":"        \"\"\"Disable an existing service and log the reason.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_596d1797","line":97,"in_reply_to":"5a710552_b153b8e1","updated":"2015-12-17 15:09:27.000000000","message":"Done","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"d9883eabf753d4f98ac100c7481eaeb2f51381bd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self._verify_response(\u0027service-disable-log-put-resp\u0027,"},{"line_number":108,"context_line":"                              subs, response, 200)"},{"line_number":109,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":110,"context_line":"                                  {\u0027disabled\u0027: True,"},{"line_number":111,"context_line":"                                   \u0027disabled_reason\u0027: \u0027test2\u0027})"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_service_delete(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_1172cc7b","line":110,"updated":"2015-12-16 16:57:57.000000000","message":"Same here as above.","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d83b076f91de708dd09973612dae8815c8062afe","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self._verify_response(\u0027service-disable-log-put-resp\u0027,"},{"line_number":108,"context_line":"                              subs, response, 200)"},{"line_number":109,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":110,"context_line":"                                  {\u0027disabled\u0027: True,"},{"line_number":111,"context_line":"                                   \u0027disabled_reason\u0027: \u0027test2\u0027})"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_service_delete(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_79681388","line":110,"in_reply_to":"5a710552_1172cc7b","updated":"2015-12-17 15:09:27.000000000","message":"Done","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"d9883eabf753d4f98ac100c7481eaeb2f51381bd","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        self._verify_response(\u0027service-force-down-put-resp\u0027, subs,"},{"line_number":151,"context_line":"                              response, 200)"},{"line_number":152,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":153,"context_line":"                                  {\u0027forced_down\u0027: True,"},{"line_number":154,"context_line":"                                   \u0027disabled\u0027: True,"},{"line_number":155,"context_line":"                                   \u0027disabled_reason\u0027: \u0027test2\u0027})"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_910c7cee","line":153,"updated":"2015-12-16 16:57:57.000000000","message":"Same here","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d83b076f91de708dd09973612dae8815c8062afe","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        self._verify_response(\u0027service-force-down-put-resp\u0027, subs,"},{"line_number":151,"context_line":"                              response, 200)"},{"line_number":152,"context_line":"        self._verify_notification(\u0027service-update\u0027,"},{"line_number":153,"context_line":"                                  {\u0027forced_down\u0027: True,"},{"line_number":154,"context_line":"                                   \u0027disabled\u0027: True,"},{"line_number":155,"context_line":"                                   \u0027disabled_reason\u0027: \u0027test2\u0027})"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_d90fc7df","line":153,"in_reply_to":"5a710552_910c7cee","updated":"2015-12-17 15:09:27.000000000","message":"Done","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"}],"nova/tests/functional/api_samples_test_base.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"d9883eabf753d4f98ac100c7481eaeb2f51381bd","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _apply_replacements(self, replacements, sample_obj):"},{"line_number":312,"context_line":"        if not replacements:"},{"line_number":313,"context_line":"            return sample_obj"},{"line_number":314,"context_line":"        for key, value in replacements.items():"},{"line_number":315,"context_line":"            obj \u003d sample_obj[\u0027payload\u0027]"},{"line_number":316,"context_line":"            for sub_key in key.split(\u0027.\u0027)[:-1]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_b1497862","line":313,"updated":"2015-12-16 16:57:57.000000000","message":"Since you do nothing with the return value of this function, do you even need to return this?\n\nIf replacements can come as None, you do need to have some sort of check, so you could either do\n\n    if replacements:\n        for key, value in replacements.items():\n            \u003cstuff\u003e\n\nor\n\n    replacements \u003d replacements or {}\n    for key, value in replacements.items():\n        \u003cstuff\u003e\n\n(I personally like the second, because I can never find a use for the null coalescing operator).","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d83b076f91de708dd09973612dae8815c8062afe","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _apply_replacements(self, replacements, sample_obj):"},{"line_number":312,"context_line":"        if not replacements:"},{"line_number":313,"context_line":"            return sample_obj"},{"line_number":314,"context_line":"        for key, value in replacements.items():"},{"line_number":315,"context_line":"            obj \u003d sample_obj[\u0027payload\u0027]"},{"line_number":316,"context_line":"            for sub_key in key.split(\u0027.\u0027)[:-1]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_b93d1bbd","line":313,"in_reply_to":"5a710552_b1497862","updated":"2015-12-17 15:09:27.000000000","message":"Done","commit_id":"da5b7387179a19eff5b1af15314da94ea995b71d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9c6f4cbecafcb9e0d120b0317e3fdf907a4fb6a1","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            raise"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _get_notification_sample(self, sample):"},{"line_number":312,"context_line":"        dir \u003d os.path.dirname(os.path.abspath(__file__))"},{"line_number":313,"context_line":"        dir \u003d os.path.normpath(os.path.join("},{"line_number":314,"context_line":"            dir,"},{"line_number":315,"context_line":"            \"../../../doc/notification_samples\"))"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_4dce8d5b","line":312,"updated":"2016-01-13 12:09:00.000000000","message":"Nit: its a keyword, maybe use sample_dir?","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e15d33350f3902f8adfce7ddc599dd2d97bcb1e4","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            raise"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _get_notification_sample(self, sample):"},{"line_number":312,"context_line":"        dir \u003d os.path.dirname(os.path.abspath(__file__))"},{"line_number":313,"context_line":"        dir \u003d os.path.normpath(os.path.join("},{"line_number":314,"context_line":"            dir,"},{"line_number":315,"context_line":"            \"../../../doc/notification_samples\"))"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_f6c4ed5f","line":312,"in_reply_to":"da6ed579_4dce8d5b","updated":"2016-01-13 15:06:26.000000000","message":"Done","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9c6f4cbecafcb9e0d120b0317e3fdf907a4fb6a1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        dir \u003d os.path.dirname(os.path.abspath(__file__))"},{"line_number":313,"context_line":"        dir \u003d os.path.normpath(os.path.join("},{"line_number":314,"context_line":"            dir,"},{"line_number":315,"context_line":"            \"../../../doc/notification_samples\"))"},{"line_number":316,"context_line":"        return dir + \u0027/\u0027 + sample + \u0027.json\u0027"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _verify_notification(self, sample_file_name, replacements\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_edc5013c","line":315,"updated":"2016-01-13 12:09:00.000000000","message":"that feels brittle, but I can\u0027t think of a better idea.","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e15d33350f3902f8adfce7ddc599dd2d97bcb1e4","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        dir \u003d os.path.dirname(os.path.abspath(__file__))"},{"line_number":313,"context_line":"        dir \u003d os.path.normpath(os.path.join("},{"line_number":314,"context_line":"            dir,"},{"line_number":315,"context_line":"            \"../../../doc/notification_samples\"))"},{"line_number":316,"context_line":"        return dir + \u0027/\u0027 + sample + \u0027.json\u0027"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _verify_notification(self, sample_file_name, replacements\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_b6999521","line":315,"in_reply_to":"da6ed579_edc5013c","updated":"2016-01-13 15:06:26.000000000","message":"Yes, I felt the same but it seems the original sample code uses the same approach (see here https://github.com/openstack/nova/blob/master/nova/tests/functional/api_samples_test_base.py#L102). As far as I know it haven\u0027t caused any problem in case of the api samples yet so I think it is safe for now.","commit_id":"0111dcdba57ef11dac1ae609c7d2a8d0911ab9a5"}],"nova/tests/unit/fake_notifier.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"6924c8b5505b962c3e9aa0d2076dd4ca01daa573","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        NOTIFICATIONS.append(msg)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class FakeVersionedNotifier(FakeNotifier):"},{"line_number":70,"context_line":"    def _notify(self, priority, ctxt, event_type, payload):"},{"line_number":71,"context_line":"        payload \u003d self._serializer.serialize_entity(ctxt, payload)"},{"line_number":72,"context_line":"        VERSIONED_NOTIFICATIONS.append({\u0027publisher_id\u0027: self.publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_35210bb5","line":69,"updated":"2015-11-23 21:18:07.000000000","message":"This should be in Ie45c03175800bb14269f3976b03a53488e084339 because that is the patch that needs to make sure bad things don\u0027t happen when you bring in this versioned notifier","commit_id":"ba50d31c15a9e878caf1fe2ab367f40a2c25d19e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a20fef9657e099cfdd76a306b8028f0cf16c9e2a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        NOTIFICATIONS.append(msg)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class FakeVersionedNotifier(FakeNotifier):"},{"line_number":70,"context_line":"    def _notify(self, priority, ctxt, event_type, payload):"},{"line_number":71,"context_line":"        payload \u003d self._serializer.serialize_entity(ctxt, payload)"},{"line_number":72,"context_line":"        VERSIONED_NOTIFICATIONS.append({\u0027publisher_id\u0027: self.publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d06accb2","line":69,"in_reply_to":"ba8a016a_35210bb5","updated":"2015-11-27 12:10:41.000000000","message":"You are right. Done","commit_id":"ba50d31c15a9e878caf1fe2ab367f40a2c25d19e"}]}
