)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40285a0a6f7d70fcb227dcafeae2edc76cbf5801","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes issue of redfish firmware update"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch fixes issue of redfish firmware update"},{"line_number":10,"context_line":"for ilo5 based hardware."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ida1d314f77b9f114e572639c7ad46545be1ce962"},{"line_number":13,"context_line":"Story: #2008403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b4dc3e6f_bd6c544e","line":10,"updated":"2020-12-15 16:33:39.000000000","message":"More details wouldn\u0027t hurt.","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"50a17e57f7843e191d3d7abe841532f66e1bdfc1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes issue of redfish firmware update"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch fixes issue of redfish firmware update"},{"line_number":10,"context_line":"for ilo5 based hardware."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ida1d314f77b9f114e572639c7ad46545be1ce962"},{"line_number":13,"context_line":"Story: #2008403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"46606ed8_710bdddc","line":10,"in_reply_to":"b4dc3e6f_bd6c544e","updated":"2020-12-16 05:49:00.000000000","message":"\u003e More details wouldn\u0027t hurt.\n\nDone","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"}],"releasenotes/notes/fixes-ilo5-redfish-firmware-update-issue-273862b2a11e3536.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40285a0a6f7d70fcb227dcafeae2edc76cbf5801","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Currently ilo5 based hardware does not support redfish based"},{"line_number":5,"context_line":"    firmware update. This fixes the issue by making the change to"},{"line_number":6,"context_line":"    use task_uri instead of task_monitor uri while fetching the"},{"line_number":7,"context_line":"    task data."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"46fa4b9e_000f98f3","line":7,"updated":"2020-12-15 16:33:39.000000000","message":"This seems to be a copy of the ironic\u0027s release note. We need an independent release note explaining what is happening in this patch. It seems like you\u0027re adding a new feature actually: the task_uri attribute.","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"50a17e57f7843e191d3d7abe841532f66e1bdfc1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Currently ilo5 based hardware does not support redfish based"},{"line_number":5,"context_line":"    firmware update. This fixes the issue by making the change to"},{"line_number":6,"context_line":"    use task_uri instead of task_monitor uri while fetching the"},{"line_number":7,"context_line":"    task data."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"a8432e24_b785003f","line":7,"in_reply_to":"46fa4b9e_000f98f3","updated":"2020-12-16 05:49:00.000000000","message":"\u003e This seems to be a copy of the ironic\u0027s release note. We need an independent release note explaining what is happening in this patch. It seems like you\u0027re adding a new feature actually: the task_uri attribute.\n\nDone","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"}],"sushy/resources/taskservice/taskmonitor.py":[{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"e171372220a784955c38287237434a50a43c9eee","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"bcbd2135_e7c7aaef","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"updated":"2020-12-04 10:17:19.000000000","message":"This is not necessary, it\u0027s the same as `task_monitor`. Yeah, bad name, it should have been `task_monitor_uri` or indeed `task_uri`. `task_monitor` takes value from Location header that should be the same task uri.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"0682ce2f4af1011780f52e088e4c6af89a362246","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"1c8d16e1_335155b1","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"08f72468_b998885a","updated":"2020-12-04 12:21:41.000000000","message":"TaskMonitor just captures the status \u0027Messages\u0027. The detailed data of the task is part of task URI (See sample data below). It is equivalent to data provided in TaskMonitor URI for iDRAC. \n\nGET https://172.17.1.93/redfish/v1/TaskService/Tasks/9/\n{\n \n\"@odata.context\": \"/redfish/v1/$metadata#Task.Task\",\n    \n\"@odata.etag\": \"W/\\\"89870DD6\\\"\",\n    \n\"@odata.id\": \"/redfish/v1/TaskService/Tasks/9/\",\n    \n\"@odata.type\": \"#Task.v1_3_0.Task\",\n    \n\"Id\": \"9\",\n    \n\"Description\": \"iLO Task\",\n    \n\"EndTime\": \"2020-10-15T07:54:31Z\",\n    \n\"Messages\": [\n        {\n            \"MessageId\": \"Base.1.4.Success\"\n        }\n    ],\n    \n\"Name\": \"Task 9\",\n    \n\"Payload\": \n\t{\n        \n\t\"HttpOperation\": \"POST\",\n        \n\t\"JsonBody\": \"{\\\"ImageURI\\\":\\\"http://172.17.1.135:8010/ilo5_240_p09.bin\\\",\\\"TransferProtocol\\\":\\\"HTTP\\\"}\",\n        \n\t\"TargetUri\": \"/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate/\"\n    \n\t},\n    \n\"StartTime\": \"2020-10-15T07:54:08Z\",\n    \n\"TaskMonitor\": \"/redfish/v1/TaskService/TaskMonitors/9/\",\n    \n\"TaskState\": \"Completed\",\n    \n\"TaskStatus\": \"OK\"\n\n\t}","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"6c18073a7b8622094fa3ef42fe2564f30422be21","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"395a8c21_1d56bca8","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"1c8d16e1_335155b1","updated":"2020-12-04 12:57:04.000000000","message":"I\u0027m thinking that these differences could be handled internally in sushy and exposed through the same property to accommodate both iDRAC and iLO (don\u0027t know about other vendor differences :)) as in the end it\u0027s the same thing. In that way there wouldn\u0027t be any additional processing in Ironic to use the right property.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"d5ce673eccdd0cb377c2a65010542788fa5d0c8a","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1ca1f49_b3870231","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"395a8c21_1d56bca8","updated":"2020-12-04 17:10:06.000000000","message":"\u003e In case of iLO, there is no \u0027Location\u0027 header returned as part of response.\n\nIt surprises me to hear that iLO is not returning a Location header in a 202 response. Returning the Location header (the TaskMonitor opaque URI) is required by the spec for 202 responses. What does HPE say about this behavior? (do they plan to fix, etc.)","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"3082cc47e34e819ac74879d987766c4cb94d4874","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"08f72468_b998885a","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"833d16d3_5207d569","updated":"2020-12-04 11:59:28.000000000","message":"ok, I see. For iDRAC it\u0027s the same URI (Location header and Task\u0027s @odata.id) and there is no TaskMonitor property in Task.\n\nIf this is the case for iLO, then in ln58 should it use value of _task_uri instead of _task_monitor?. To construct the object it will use JSON from the response Body (unlike iDRAC), but that Task instance will have incorrect path (None) then.\n\nAnd what\u0027s inside of `/redfish/v1/TaskService/TaskMonitors/7/`?","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"3bef891100d5882e41b39f2b021cd2fb8d526e83","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e858635_7858f07a","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"a1ca1f49_b3870231","updated":"2020-12-08 13:17:43.000000000","message":"In case of Success, Taskmonitor URI only returns this\n\n{\n    \"error\": {\n        \"code\": \"iLO.0.10.ExtendedInfo\",\n        \"message\": \"See @Message.ExtendedInfo for more information.\",\n        \"@Message.ExtendedInfo\": [\n            {\n                \"MessageId\": \"Base.1.4.Success\"\n            }\n        ]\n    }\n}","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"69c018b650f41da25ee4cb54a77df2b8e3aa6e9a","unresolved":true,"context_lines":[{"line_number":30,"context_line":"                 redfish_version\u003dNone,"},{"line_number":31,"context_line":"                 registries\u003dNone,"},{"line_number":32,"context_line":"                 field_data\u003dNone,"},{"line_number":33,"context_line":"                 task_uri\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"A class representing a task monitor"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param connector: A Connector instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"833d16d3_5207d569","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":30},"in_reply_to":"bcbd2135_e7c7aaef","updated":"2020-12-04 11:15:35.000000000","message":"In case of iLO, there is no \u0027Location\u0027 header returned as part of response. Instead it returns the TaskMonitor and Task URIs as part of firmware update response as given:-\n{\n\u0027@odata.context\u0027: \u0027/redfish/v1/$metadata#Task.Task\u0027, \n\u0027@odata.etag\u0027: \u0027W/\"D793BCE6\"\u0027, \n\u0027@odata.id\u0027: \u0027/redfish/v1/TaskService/Tasks/7/\u0027, \n\u0027@odata.type\u0027: \u0027#Task.v1_3_0.Task\u0027, \n\u0027Id\u0027: \u00277\u0027, \n\u0027Description\u0027: \u0027iLO Task\u0027, \n\u0027Messages\u0027: [{}], \n\u0027Name\u0027: \u0027Task 7\u0027, \n\u0027Payload\u0027: {\n\t\u0027HttpOperation\u0027: \u0027POST\u0027, \n\t\u0027JsonBody\u0027: \u0027{\"ImageURI\":\"http://172.17.1.135:8010/ilo5_240_p09.bin\",\"TransferProtocol\":\"HTTP\"}\u0027, \n\t\u0027TargetUri\u0027: \u0027/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate/\u0027\n\t}, \n\u0027StartTime\u0027: \u00272020-10-15T07:21:56Z\u0027, \n\u0027TaskMonitor\u0027: \u0027/redfish/v1/TaskService/TaskMonitors/7/\u0027, \n\u0027TaskState\u0027: \u0027New\u0027\n}","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":23847,"name":"Richard G. Pioso","email":"richard.pioso@gmail.com","username":"richard.pioso"},"change_message_id":"5de98a2669f78bd0f5f8ab0935ec4fbf3a4b6e03","unresolved":true,"context_lines":[{"line_number":40,"context_line":"        :param redfish_version: The version of RedFish. Used to construct"},{"line_number":41,"context_line":"            the object according to schema of the given version."},{"line_number":42,"context_line":"        :param registries: Dict of Redfish Message Registry objects to be"},{"line_number":43,"context_line":"            used in any resource that needs registries to parse messages."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._connector \u003d connector"},{"line_number":46,"context_line":"        self._task_monitor \u003d task_monitor"}],"source_content_type":"text/x-python","patch_set":1,"id":"c121fa5b_78da5c96","line":43,"updated":"2020-12-04 00:51:57.000000000","message":"Please add doc for the new parameter, task_uri, and the one missing it, field_data.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        :param redfish_version: The version of RedFish. Used to construct"},{"line_number":41,"context_line":"            the object according to schema of the given version."},{"line_number":42,"context_line":"        :param registries: Dict of Redfish Message Registry objects to be"},{"line_number":43,"context_line":"            used in any resource that needs registries to parse messages."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._connector \u003d connector"},{"line_number":46,"context_line":"        self._task_monitor \u003d task_monitor"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fa94119_96f76f3c","line":43,"in_reply_to":"c121fa5b_78da5c96","updated":"2020-12-15 07:48:33.000000000","message":"Done","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":23847,"name":"Richard G. Pioso","email":"richard.pioso@gmail.com","username":"richard.pioso"},"change_message_id":"5de98a2669f78bd0f5f8ab0935ec4fbf3a4b6e03","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        self._redfish_version \u003d redfish_version"},{"line_number":48,"context_line":"        self._registries \u003d registries"},{"line_number":49,"context_line":"        self._field_data \u003d field_data"},{"line_number":50,"context_line":"        self._task_uri \u003d task_uri"},{"line_number":51,"context_line":"        self._reader \u003d base.get_reader(connector, task_monitor)"},{"line_number":52,"context_line":"        self._task \u003d None"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c37d3ab2_c30afc58","line":50,"updated":"2020-12-04 00:51:57.000000000","message":"This appears to be unused. Is it needed?","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"69c018b650f41da25ee4cb54a77df2b8e3aa6e9a","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        self._redfish_version \u003d redfish_version"},{"line_number":48,"context_line":"        self._registries \u003d registries"},{"line_number":49,"context_line":"        self._field_data \u003d field_data"},{"line_number":50,"context_line":"        self._task_uri \u003d task_uri"},{"line_number":51,"context_line":"        self._reader \u003d base.get_reader(connector, task_monitor)"},{"line_number":52,"context_line":"        self._task \u003d None"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff23d7c3_10d2dd61","line":50,"in_reply_to":"c37d3ab2_c30afc58","updated":"2020-12-04 11:15:35.000000000","message":"It is used from Ironic Management interface. In case of iLO the task status can be monitored from \u0027Task\u0027 URI and not from \u0027TaskMonitor\u0027 URI. The firmware update interface in Ironic fetches this URI to create the TaskMonitor object using this Task URI instead of TakMonitor. Please see   \nhttps://review.opendev.org/c/openstack/ironic/+/764914","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":18781,"name":"vinay50muddu","email":"vinay50muddu@yahoo.com","username":"vmud213"},"change_message_id":"4eac3ebf0e4af85ca35b1240af72b36bf9233337","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"219f5064_81d668b5","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"updated":"2020-12-01 11:50:21.000000000","message":"Any specific reason to ignore the content_length?\nIs it because certain systems may not return content length\nin the response? Can you check why it was kept in the first place earlier?","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d400eb3e4a192baa55daf1faec8b1988c37d841b","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f3baa5a_e41a382c","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"1634367e_4011a94b","updated":"2020-12-03 16:46:10.000000000","message":"And on an HTTP Accepted, any content-length response is not required if I\u0027m remembering correctly. I wonder why that was guarded... :\\","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"002f836af66f2a8077209723ad996d6b8d61c556","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1634367e_4011a94b","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"219f5064_81d668b5","updated":"2020-12-02 05:44:54.000000000","message":"\u0027Content Length\u0027 Header is not passed by iLO. It seems not a must field when we get HTTP status  as \u0027ACCEPTED\u0027. Also it was used as an extra check to see the operation was successful.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":23847,"name":"Richard G. Pioso","email":"richard.pioso@gmail.com","username":"richard.pioso"},"change_message_id":"5de98a2669f78bd0f5f8ab0935ec4fbf3a4b6e03","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4e9e672_322ffc0a","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"479d74c7_ab5aeb3a","updated":"2020-12-04 00:51:57.000000000","message":"I believe this change is good to go. If there is not enough data for all of the fields in Task, the Task will be successfully constructed as long as its two (2) required fields, Id and Name, are present. And, if there is no body returned by the POST, its base class will GET it during __init__(). [1]\n\nI have cc\u0027d Chris Dearborn on this change, since he wrote the original code and added Aija Jaunteva as a reviewer, because she is also familiar with sushy.\n\n[1] https://github.com/openstack/sushy/blob/af4adf56a665ebf90ccff35e12d1228a4cf91c65/sushy/resources/base.py#L599","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"73cd3b0d98be5041f018e6b52804706a565b15ab","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"cc075af0_e972128f","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"49524f43_4110cb5b","updated":"2020-12-04 21:33:48.000000000","message":"\u003e The JsonDataReader GETs the resource using the `path` instance from the ResourceBase object. But in the case of the Task object, the path isn\u0027t passed in to its constructor because we do not have one.\n\nAmending the above line from my previous comment a bit: I see that in the TaskMonitor constructor, the call to get_reader() passes in the the path of the TaskMonitor URI. So if and when the JsonDataReader calls GET to fetch the resource, it will do a GET on the TaskMonitor (not the Task resource). So again, if the Task resource is not included in the body of the 202 response from a GET on the TaskMonitor, the Task object cannot be created.\n\nIn other words, the JsonDataReader does have a `path` to do a GET on; it\u0027s just not the right path to get the Task resource.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"09e91b100183fdf65b66f0324634e5599507c0a6","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"479d74c7_ab5aeb3a","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"8f3baa5a_e41a382c","updated":"2020-12-03 18:48:11.000000000","message":"In Redfish, when a 202 is returned, the response body should be an instance of the Task resource, but it does not have to be. It may be an empty body. And if the body is empty, a Task resource cannot be constructed.\n\nSo it seems like after this change we\u0027ll be trying to create a Task instance even if no body was returned (which I assume will raise an exception).","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"d5ce673eccdd0cb377c2a65010542788fa5d0c8a","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"49524f43_4110cb5b","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"c4e9e672_322ffc0a","updated":"2020-12-04 17:10:06.000000000","message":"The problem here is that we don\u0027t have the Task URI available to GET in the case that the 202 response does not return a body.\n\nThe JsonDataReader GETs the resource using the `path` instance from the ResourceBase object. But in the case of the Task object, the path isn\u0027t passed in to its constructor because we do not have one.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"e171372220a784955c38287237434a50a43c9eee","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7c1eec94_cecf1799","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"c4e9e672_322ffc0a","updated":"2020-12-04 10:17:19.000000000","message":"iDRAC returns empty body with header Content-Length: 0.\n\nThe code as it is now should work as then it will go and fetch resource at `self._task_monitor` (that is URI although name is not indicated that).\n\nHowever, without this change self._task remained set to None. Now it will be populated either from response Body or GETting from URI. Have to check if this somehow impacts workflow at Ironic.","commit_id":"d4be3ccb56ba4a4a9ae3560913408872aa81619d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cfa6580dd47f9ca7dd86143d69bbd70cc9b7f608","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        :param redfish_version: The version of RedFish. Used to construct"},{"line_number":41,"context_line":"            the object according to schema of the given version."},{"line_number":42,"context_line":"        :param registries: Dict of Redfish Message Registry objects to be"},{"line_number":43,"context_line":"            used in any resource that needs registries to parse messages."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._connector \u003d connector"},{"line_number":46,"context_line":"        self._task_monitor \u003d task_monitor"}],"source_content_type":"text/x-python","patch_set":2,"id":"33fa2229_99266120","line":43,"updated":"2020-12-14 12:15:07.000000000","message":"please document task_uri (bonus for documenting field_data)","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        :param redfish_version: The version of RedFish. Used to construct"},{"line_number":41,"context_line":"            the object according to schema of the given version."},{"line_number":42,"context_line":"        :param registries: Dict of Redfish Message Registry objects to be"},{"line_number":43,"context_line":"            used in any resource that needs registries to parse messages."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        self._connector \u003d connector"},{"line_number":46,"context_line":"        self._task_monitor \u003d task_monitor"}],"source_content_type":"text/x-python","patch_set":2,"id":"e0a292dd_7169032f","line":43,"in_reply_to":"33fa2229_99266120","updated":"2020-12-15 07:48:33.000000000","message":"\u003e please document task_uri (bonus for documenting field_data)\n\nDone","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cfa6580dd47f9ca7dd86143d69bbd70cc9b7f608","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self._redfish_version \u003d redfish_version"},{"line_number":48,"context_line":"        self._registries \u003d registries"},{"line_number":49,"context_line":"        self._field_data \u003d field_data"},{"line_number":50,"context_line":"        self._task_uri \u003d task_uri"},{"line_number":51,"context_line":"        self._reader \u003d base.get_reader(connector, task_monitor)"},{"line_number":52,"context_line":"        self._task \u003d None"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"980fb023_b088fff9","line":50,"updated":"2020-12-14 12:15:07.000000000","message":"nit: do you want to add a public accessor for this field?","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self._redfish_version \u003d redfish_version"},{"line_number":48,"context_line":"        self._registries \u003d registries"},{"line_number":49,"context_line":"        self._field_data \u003d field_data"},{"line_number":50,"context_line":"        self._task_uri \u003d task_uri"},{"line_number":51,"context_line":"        self._reader \u003d base.get_reader(connector, task_monitor)"},{"line_number":52,"context_line":"        self._task \u003d None"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b4ef8793_3335448e","line":50,"in_reply_to":"980fb023_b088fff9","updated":"2020-12-15 07:48:33.000000000","message":"\u003e nit: do you want to add a public accessor for this field?\n\nDone","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cfa6580dd47f9ca7dd86143d69bbd70cc9b7f608","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c93dcb00_53b02bd8","line":56,"updated":"2020-12-14 12:15:07.000000000","message":"nit: redundant brackets","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self._field_data:"},{"line_number":55,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":56,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED):"},{"line_number":57,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":58,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":59,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":2,"id":"71314206_13069736","line":56,"in_reply_to":"c93dcb00_53b02bd8","updated":"2020-12-15 07:48:33.000000000","message":"\u003e nit: redundant brackets\n\nDone","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"f62521708dba84f45a2621927f580eb4ec2553c3","unresolved":true,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if self._field_data.status_code \u003d\u003d http_client.ACCEPTED:"},{"line_number":59,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":60,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":61,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ab4c64a_3a54c741","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":68},"updated":"2020-12-16 05:34:42.000000000","message":"See my comment in updateservice.py. In the case that there is not a Task resource in the body of the 202 response, you will not be able to successfully create a Task class instance here.\n\nSuggest making this condition:\n\n          if task_uri and self._field_data.status_code \u003d\u003d http_client.ACCEPTED:","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"aa41100f640669383a0f53951ef29d14aa7e2572","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if self._field_data.status_code \u003d\u003d http_client.ACCEPTED:"},{"line_number":59,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"},{"line_number":60,"context_line":"                                       redfish_version\u003dself._redfish_version,"},{"line_number":61,"context_line":"                                       registries\u003dself._registries,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c454180f_d5032470","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":68},"in_reply_to":"3ab4c64a_3a54c741","updated":"2020-12-16 06:45:44.000000000","message":"Done","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"67aa272b9f3f0c99b0e9780fb182db530c5af6b9","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self._task \u003d None"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED"},{"line_number":59,"context_line":"                    and task_uri):"},{"line_number":60,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0f20a05e_329ba2cf","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":24},"updated":"2021-01-07 10:21:55.000000000","message":"This comment mentions checking \u0027body\u0027, but the new code does not do that anymore. Is it implicit that task_uri is the way to determine if body was returned? If so, this should be clarified in the comment explicitly. Or make the code more obvious by checking the body (what was the reason Content-Length not used?).","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"4761e4d1f2ff2e9f71954a2427801b75a4f022a0","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self._task \u003d None"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED"},{"line_number":59,"context_line":"                    and task_uri):"},{"line_number":60,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"6e5f2521_ca7fd707","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":24},"in_reply_to":"0f20a05e_329ba2cf","updated":"2021-01-12 08:10:09.000000000","message":"Because in case of iLO does not contain \u0027Content-Length\u0027 in the response data.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"02b9d5412adf3550c9b9c2519a2a266afa9f7dce","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self._task \u003d None"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED"},{"line_number":59,"context_line":"                    and task_uri):"},{"line_number":60,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5b757113_1c8ad0e9","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":24},"in_reply_to":"22613bac_73647751","updated":"2021-01-14 14:54:31.000000000","message":"I\u0027m not sure that would work since it could still be a literal empty body. I think this is *likely* the best path forward as-is.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"77c6dd6112b516d8394b0f7cf7344d68b4c26f28","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        self._task \u003d None"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if self._field_data:"},{"line_number":57,"context_line":"            # If a body was returned, assume it\u0027s a Task on a 202 status code"},{"line_number":58,"context_line":"            if (self._field_data.status_code \u003d\u003d http_client.ACCEPTED"},{"line_number":59,"context_line":"                    and task_uri):"},{"line_number":60,"context_line":"                self._task \u003d task.Task(self._connector, self._task_monitor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"22613bac_73647751","line":57,"range":{"start_line":57,"start_character":19,"end_line":57,"end_character":24},"in_reply_to":"6e5f2521_ca7fd707","updated":"2021-01-13 10:26:05.000000000","message":"perhaps then could use self._field_data.json_doc to determine if there is any content","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"}],"sushy/resources/updateservice/updateservice.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cfa6580dd47f9ca7dd86143d69bbd70cc9b7f608","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from six.moves.urllib.parse import urljoin"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from sushy import exceptions"},{"line_number":22,"context_line":"from sushy.resources import base"}],"source_content_type":"text/x-python","patch_set":2,"id":"4ab3a8fc_344491e5","line":19,"updated":"2020-12-14 12:15:07.000000000","message":"Not six usage please.","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from six.moves.urllib.parse import urljoin"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from sushy import exceptions"},{"line_number":22,"context_line":"from sushy.resources import base"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ecd7748_24c969fc","line":19,"in_reply_to":"4ab3a8fc_344491e5","updated":"2020-12-15 07:48:33.000000000","message":"\u003e Not six usage please.\n\nDone","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cfa6580dd47f9ca7dd86143d69bbd70cc9b7f608","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        task_monitor \u003d rsp.headers.get(header)"},{"line_number":160,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":161,"context_line":"        task_uri \u003d None"},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7c7b08a_c1264b20","line":162,"updated":"2020-12-14 12:15:07.000000000","message":"I think @odata.id is mandatory, no?","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        task_monitor \u003d rsp.headers.get(header)"},{"line_number":160,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":161,"context_line":"        task_uri \u003d None"},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1177a86a_a2628a1e","line":162,"in_reply_to":"b7c7b08a_c1264b20","updated":"2020-12-15 07:48:33.000000000","message":"Yeah. i have made the changes","commit_id":"0cddf766360c2e2f1c4711cc48b8dcb30be39f2a"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"f62521708dba84f45a2621927f580eb4ec2553c3","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        header \u003d \u0027Location\u0027"},{"line_number":158,"context_line":"        task_monitor \u003d rsp.headers.get(header)"},{"line_number":159,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":160,"context_line":"        task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if not task_monitor:"},{"line_number":163,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":3,"id":"6a70ac79_29efa11e","line":160,"range":{"start_line":159,"start_character":8,"end_line":160,"end_character":55},"updated":"2020-12-16 05:34:42.000000000","message":"This will work fine for services that return a Task resource in the body of a 202 response. But in the Redfish spec it is only recommended that a Task resource is returned; it is not required. There will very likely be services out there that do not have a Task resource in the response body. The task_uri_data variable above will be None in that case.\n\nSuggest setting task_uri to None if task_uri_data is None (so that task_uri gets passed in as None in the TaskMonitor constructor call below). See also my corresponding suggestion in taskmonitor.py.","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"aa41100f640669383a0f53951ef29d14aa7e2572","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        header \u003d \u0027Location\u0027"},{"line_number":158,"context_line":"        task_monitor \u003d rsp.headers.get(header)"},{"line_number":159,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":160,"context_line":"        task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if not task_monitor:"},{"line_number":163,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":3,"id":"18a8b65c_9aa2e942","line":160,"range":{"start_line":159,"start_character":8,"end_line":160,"end_character":55},"in_reply_to":"6a70ac79_29efa11e","updated":"2020-12-16 06:45:44.000000000","message":"Done","commit_id":"b369de2fdedc1eb20636901feb0e035dba81f97b"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"81861a0e8160e244afd749aaa422a7b7540131ff","unresolved":true,"context_lines":[{"line_number":159,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"}],"source_content_type":"text/x-python","patch_set":5,"id":"c8b64a1a_6986304f","line":162,"updated":"2020-12-29 10:48:32.000000000","message":"this condition would benefit from a unit test case to make sure that both scenarios for iLO and iDRAC are covered.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"4761e4d1f2ff2e9f71954a2427801b75a4f022a0","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        task_uri_data \u003d json_data.get(\u0027@odata.id\u0027)"},{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"}],"source_content_type":"text/x-python","patch_set":5,"id":"4b1857c9_e528a9e1","line":162,"in_reply_to":"c8b64a1a_6986304f","updated":"2021-01-12 08:10:09.000000000","message":"Done","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"81861a0e8160e244afd749aaa422a7b7540131ff","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0a085053_f888dc00","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"updated":"2020-12-29 10:48:32.000000000","message":"why is `urljoin` used here? What does it achieve?","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"846c41bc55c4b6a7009b21dffa862b8b7a7931e2","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"cd9fa81c_e013325f","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"0a085053_f888dc00","updated":"2021-01-05 16:30:31.000000000","message":"URL safe appending? Because I think you\u0027d end up getting the URL to look along with the ID value to inquire with?","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"51362bce7026ae56489f3dadaafd732fbcdd04e6","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c802aba0_2e97a226","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"0a085053_f888dc00","updated":"2021-01-05 17:20:24.000000000","message":"Value of @odata.id has only path (\u0027@odata.id\u0027: \u0027/redfish/v1/TaskService/Tasks/10/\u0027) and not the complete url. So to make it a complete url urljoin is being used.\n\nEx: task_monitor \u003d \"https://172.17.1.108/redfish/v1/TaskService/TaskMonitors/17/\"\n    task_uri_data \u003d \"/redfish/v1/TaskService/Tasks/10/\"\n\nSo, task_uri will be \"https://172.17.1.108/redfish/v1/TaskService/Tasks/10/\"","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"4761e4d1f2ff2e9f71954a2427801b75a4f022a0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"f5aabbab_140c6b1a","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"43b1115c_411b6293","updated":"2021-01-12 08:10:09.000000000","message":"Done","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"502c515c15314f0891a09310a4c80a3a115c4057","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"d90f1c66_b3e95591","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"64a89d66_c77fee6e","updated":"2021-01-05 17:24:09.000000000","message":"I think the point is to construct a full URI of the Task resource (including the scheme and netloc).\n\nThe task_uri_data, if present, will be something like: /redfish/v1/TaskService/Tasks/{TaskId}\n\nThe task_monitor will be something like: https://example.com/redfish/v1/TaskMonitor/{TaskMonitorId}\n\nIf task_uri_data is not None, the resulting task_uri will then be: https://example.com/redfish/v1/TaskService/Tasks/{TaskId}\n\nIf task_uri_data is None, the resulting task_uri will be: https://example.com/redfish/v1/TaskMonitor/{TaskMonitorId}\n(If there is no task_uri_data, the task_uri will just be the task_monitor.)\n\nNote that if there is no task_monitor, an exception will be raised below on line #166.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"8456c4044bcefb0735b2164a7bab02bdd27722bc","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"64a89d66_c77fee6e","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"cd9fa81c_e013325f","updated":"2021-01-05 16:38:58.000000000","message":"only one of them will be populated. For iDRAC the first, for iLO the second. Maybe it\u0027s done to pick the one non-empty? (If so, I find it a bit cryptic). Hence my question as I\u0027m missing smth.\nAnd for iDRAC task_monitor \u003d\u003d task_uri_data if they both were populated at the same time.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"9952aa5380ab85e5cc031b1f5919282ba430b2f5","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"e7ace7b9_6a5b7a65","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"d90f1c66_b3e95591","updated":"2021-01-05 17:51:38.000000000","message":"thanks everyone for clarifications.\n\n`task_monitor` is fetched from Location header. In case for iDRAC that\u0027s not full URL, but smth like Location: /redfish/v1/TaskService/Tasks/JID_098680270852\nIt\u0027s the same value when doing GET on the Location URI and getting:\n\n  \"@odata.id\": \"/redfish/v1/TaskService/Tasks/JID_098680270852\",\n\niDRAC does not have /redfish/v1/TaskMonitor endpoint at all.\n\nThis part of the code probably will still work with iDRAC as task_uri_data will be None. But will have to check if other changes are not breaking iDRAC.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"67aa272b9f3f0c99b0e9780fb182db530c5af6b9","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        task_uri \u003d None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        if task_uri_data:"},{"line_number":163,"context_line":"            task_uri \u003d urljoin(task_monitor, task_uri_data)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if not task_monitor:"},{"line_number":166,"context_line":"            raise exceptions.MissingHeaderError(target_uri\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":5,"id":"43b1115c_411b6293","line":163,"range":{"start_line":163,"start_character":12,"end_line":163,"end_character":59},"in_reply_to":"e7ace7b9_6a5b7a65","updated":"2021-01-07 10:21:55.000000000","message":"why not have task_monitor \u003d urljoin(task_monitor, task_uri_data) and get rid of task_uri in TaskMonitor constructor?","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"}],"sushy/tests/unit/resources/taskservice/test_taskmonitor.py":[{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"09e91b100183fdf65b66f0324634e5599507c0a6","unresolved":true,"context_lines":[{"line_number":45,"context_line":"            field_data\u003dself.field_data"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_init_accepted_no_content(self):"},{"line_number":49,"context_line":"        field_data \u003d resource_base.FieldData("},{"line_number":50,"context_line":"            http_client.ACCEPTED,"},{"line_number":51,"context_line":"            {\u0027Content-Length\u0027: 0,"},{"line_number":52,"context_line":"             \u0027Location\u0027: \u0027/Task/545\u0027,"},{"line_number":53,"context_line":"             \u0027Retry-After\u0027: 20,"},{"line_number":54,"context_line":"             \u0027Allow\u0027: \u0027DELETE\u0027},"},{"line_number":55,"context_line":"            None)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":58,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":59,"context_line":"            field_data\u003dfield_data)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertIsNone(task_monitor.task)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init_accepted_content(self):"},{"line_number":64,"context_line":"        self.assertIsNotNone(self.task_monitor._task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccd0eefd_1d62ffad","side":"PARENT","line":61,"range":{"start_line":48,"start_character":4,"end_line":61,"end_character":44},"updated":"2020-12-03 18:48:11.000000000","message":"I think this should still be a valid case to unit test. Getting a 202 with no body is a valid case in Redfish.","commit_id":"7016cc0f31050ab656e1e26c80bd44ce3e9fd57a"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"e171372220a784955c38287237434a50a43c9eee","unresolved":true,"context_lines":[{"line_number":45,"context_line":"            field_data\u003dself.field_data"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_init_accepted_no_content(self):"},{"line_number":49,"context_line":"        field_data \u003d resource_base.FieldData("},{"line_number":50,"context_line":"            http_client.ACCEPTED,"},{"line_number":51,"context_line":"            {\u0027Content-Length\u0027: 0,"},{"line_number":52,"context_line":"             \u0027Location\u0027: \u0027/Task/545\u0027,"},{"line_number":53,"context_line":"             \u0027Retry-After\u0027: 20,"},{"line_number":54,"context_line":"             \u0027Allow\u0027: \u0027DELETE\u0027},"},{"line_number":55,"context_line":"            None)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":58,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":59,"context_line":"            field_data\u003dfield_data)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertIsNone(task_monitor.task)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init_accepted_content(self):"},{"line_number":64,"context_line":"        self.assertIsNotNone(self.task_monitor._task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c1df52cc_3d261bc2","side":"PARENT","line":61,"range":{"start_line":48,"start_character":4,"end_line":61,"end_character":44},"in_reply_to":"49da819b_2554ca79","updated":"2020-12-04 10:17:19.000000000","message":"agree, need to adjust test case to check that task is fetched via GET instead of provided JSON.\n\nAlso need to put back coverage (another test case) for changed condition, that is now partially covered [1].\n\n[1] https://2f212ab61c6b9feaa261-dc7b8fac10688d132d58a9050206c3ae.ssl.cf5.rackcdn.com/764915/1/check/openstack-tox-cover/3f57ed1/cover/sushy_resources_taskservice_taskmonitor_py.html#t56","commit_id":"7016cc0f31050ab656e1e26c80bd44ce3e9fd57a"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"2a721654ad9db71882dab7641d4adaaed6ac74e6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            field_data\u003dself.field_data"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_init_accepted_no_content(self):"},{"line_number":49,"context_line":"        field_data \u003d resource_base.FieldData("},{"line_number":50,"context_line":"            http_client.ACCEPTED,"},{"line_number":51,"context_line":"            {\u0027Content-Length\u0027: 0,"},{"line_number":52,"context_line":"             \u0027Location\u0027: \u0027/Task/545\u0027,"},{"line_number":53,"context_line":"             \u0027Retry-After\u0027: 20,"},{"line_number":54,"context_line":"             \u0027Allow\u0027: \u0027DELETE\u0027},"},{"line_number":55,"context_line":"            None)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":58,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":59,"context_line":"            field_data\u003dfield_data)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertIsNone(task_monitor.task)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init_accepted_content(self):"},{"line_number":64,"context_line":"        self.assertIsNotNone(self.task_monitor._task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b8933cc6_d10f68d1","side":"PARENT","line":61,"range":{"start_line":48,"start_character":4,"end_line":61,"end_character":44},"in_reply_to":"c1df52cc_3d261bc2","updated":"2020-12-15 07:48:33.000000000","message":"Done","commit_id":"7016cc0f31050ab656e1e26c80bd44ce3e9fd57a"},{"author":{"_account_id":23847,"name":"Richard G. Pioso","email":"richard.pioso@gmail.com","username":"richard.pioso"},"change_message_id":"5de98a2669f78bd0f5f8ab0935ec4fbf3a4b6e03","unresolved":true,"context_lines":[{"line_number":45,"context_line":"            field_data\u003dself.field_data"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_init_accepted_no_content(self):"},{"line_number":49,"context_line":"        field_data \u003d resource_base.FieldData("},{"line_number":50,"context_line":"            http_client.ACCEPTED,"},{"line_number":51,"context_line":"            {\u0027Content-Length\u0027: 0,"},{"line_number":52,"context_line":"             \u0027Location\u0027: \u0027/Task/545\u0027,"},{"line_number":53,"context_line":"             \u0027Retry-After\u0027: 20,"},{"line_number":54,"context_line":"             \u0027Allow\u0027: \u0027DELETE\u0027},"},{"line_number":55,"context_line":"            None)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":58,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":59,"context_line":"            field_data\u003dfield_data)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertIsNone(task_monitor.task)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init_accepted_content(self):"},{"line_number":64,"context_line":"        self.assertIsNotNone(self.task_monitor._task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"49da819b_2554ca79","side":"PARENT","line":61,"range":{"start_line":48,"start_character":4,"end_line":61,"end_character":44},"in_reply_to":"ccd0eefd_1d62ffad","updated":"2020-12-04 00:51:57.000000000","message":"I agree, and, as I described in another comment, I believe the code will try to GET it. That GET causes task_monitor.task to not be None.","commit_id":"7016cc0f31050ab656e1e26c80bd44ce3e9fd57a"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"81861a0e8160e244afd749aaa422a7b7540131ff","unresolved":true,"context_lines":[{"line_number":41,"context_line":"            self.json_doc)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":44,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":45,"context_line":"            field_data\u003dself.field_data,"},{"line_number":46,"context_line":"            task_uri\u003d\u0027/Task/545\u0027"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_init_accepted_no_content(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"104d6914_90fb4324","line":46,"range":{"start_line":44,"start_character":1,"end_line":46,"end_character":32},"updated":"2020-12-29 10:48:32.000000000","message":"is this realistic setup? That both task monitor and task uri will be provided for the instance?\nFrom what I got - for iDRAC task monitor will be populated, but might not have task uri. For iLO task uri will be populated, but never task monitor.\n\nThe test cases need to depict realistic situations, otherwise it feels that test cases are not covering all possible scenarios both for iLo and iDRAC.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"51362bce7026ae56489f3dadaafd732fbcdd04e6","unresolved":true,"context_lines":[{"line_number":41,"context_line":"            self.json_doc)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":44,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":45,"context_line":"            field_data\u003dself.field_data,"},{"line_number":46,"context_line":"            task_uri\u003d\u0027/Task/545\u0027"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_init_accepted_no_content(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"f754bf44_90abada8","line":46,"range":{"start_line":44,"start_character":1,"end_line":46,"end_character":32},"in_reply_to":"104d6914_90fb4324","updated":"2021-01-05 17:20:24.000000000","message":"In case of iLO, the body contains both task_monitor and task uri. So in case of iLO both entries will be there. The only problem is task_monitor uri does only contain message, so to get all the data we need to use task uri instead task_montior uri.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"4761e4d1f2ff2e9f71954a2427801b75a4f022a0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            self.json_doc)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":44,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":45,"context_line":"            field_data\u003dself.field_data,"},{"line_number":46,"context_line":"            task_uri\u003d\u0027/Task/545\u0027"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_init_accepted_no_content(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"4d5d5a73_192b62b4","line":46,"range":{"start_line":44,"start_character":1,"end_line":46,"end_character":32},"in_reply_to":"66370181_1ca43661","updated":"2021-01-12 08:10:09.000000000","message":"Done","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"67aa272b9f3f0c99b0e9780fb182db530c5af6b9","unresolved":true,"context_lines":[{"line_number":41,"context_line":"            self.json_doc)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":44,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":45,"context_line":"            field_data\u003dself.field_data,"},{"line_number":46,"context_line":"            task_uri\u003d\u0027/Task/545\u0027"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_init_accepted_no_content(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"66370181_1ca43661","line":46,"range":{"start_line":44,"start_character":1,"end_line":46,"end_character":32},"in_reply_to":"89285d56_a5f85777","updated":"2021-01-07 10:21:55.000000000","message":"For iDRAC task_uri always will be None, so not having a test cases where task_uri\u003dNone removes iDRAC use-case simulation from these unit tests. Moreover, if task_monitor and task_uri is the same \u0027/Task/545\u0027, it raises the question why task_uri is needed at all if that\u0027s the same value as task_monitor. Is this how it ends up with iLO?","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"9952aa5380ab85e5cc031b1f5919282ba430b2f5","unresolved":true,"context_lines":[{"line_number":41,"context_line":"            self.json_doc)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.task_monitor \u003d taskmonitor.TaskMonitor("},{"line_number":44,"context_line":"            self.conn, \u0027/Task/545\u0027,"},{"line_number":45,"context_line":"            field_data\u003dself.field_data,"},{"line_number":46,"context_line":"            task_uri\u003d\u0027/Task/545\u0027"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_init_accepted_no_content(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"89285d56_a5f85777","line":46,"range":{"start_line":44,"start_character":1,"end_line":46,"end_character":32},"in_reply_to":"f754bf44_90abada8","updated":"2021-01-05 17:51:38.000000000","message":"but not for iDRAC. Apart from these unit tests that mimic reality or at least try, there are no integration tests for this feature, so manual testing will be required to make sure that this change still works for iDRAC as there are some differences around Tasks/TaskMonitor etc.","commit_id":"913689c3ebdc36c5bad2cb319f2154f8018d0dbd"}]}
