)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"758e0dbfe383400d5559eb762299cdbe83051e44","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implementation of Device v2 API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The v2 API spec has been merged https://review.opendev.org/#/c/658263/"},{"line_number":10,"context_line":"This patch aims at implement v2 Device list, show APIs which is a"},{"line_number":11,"context_line":"dependency of Horizon-Cyborg intergration part."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_e3919047","line":9,"updated":"2019-11-22 17:46:08.000000000","message":"True, but it was not implemented in Train. I think we are supposed to re-propose the spec in Ussuri.","commit_id":"a086791119919506a6d6360a36df9b1d81ed5547"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5a5edb8b039680a23a207bc0e36902a6c625e8cf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implementation of Device v2 API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The v2 API spec has been merged https://review.opendev.org/#/c/658263/"},{"line_number":10,"context_line":"This patch aims at implement v2 Device list, show APIs which is a"},{"line_number":11,"context_line":"dependency of Horizon-Cyborg intergration part."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_db91d047","line":9,"in_reply_to":"3fa7e38b_e3919047","updated":"2019-11-25 07:04:59.000000000","message":"I have re-propose device API spec in Ussuri, please see https://review.opendev.org/#/c/695840/","commit_id":"a086791119919506a6d6360a36df9b1d81ed5547"}],"cyborg/api/controllers/types.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    name \u003d \u0027filtertype\u0027"},{"line_number":31,"context_line":"    basetype \u003d wtypes.text"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    # TODO(Sundar): Ensure v1 and v2 APIs coexist."},{"line_number":34,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":35,"context_line":"                                    \u0027board\u0027, \u0027availability\u0027, \u0027assignable\u0027,"},{"line_number":36,"context_line":"                                    \u0027interface_type\u0027, \u0027instance_uuid\u0027, \u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_3f912554","line":33,"updated":"2020-01-06 23:43:17.000000000","message":"We can remove this comment now, right?","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    name \u003d \u0027filtertype\u0027"},{"line_number":31,"context_line":"    basetype \u003d wtypes.text"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    # TODO(Sundar): Ensure v1 and v2 APIs coexist."},{"line_number":34,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":35,"context_line":"                                    \u0027board\u0027, \u0027availability\u0027, \u0027assignable\u0027,"},{"line_number":36,"context_line":"                                    \u0027interface_type\u0027, \u0027instance_uuid\u0027, \u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_d49c73c0","line":33,"in_reply_to":"3fa7e38b_3f912554","updated":"2020-01-07 06:27:40.000000000","message":"Agree.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    # TODO(Sundar): Ensure v1 and v2 APIs coexist."},{"line_number":34,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":35,"context_line":"                                    \u0027board\u0027, \u0027availability\u0027, \u0027assignable\u0027,"},{"line_number":36,"context_line":"                                    \u0027interface_type\u0027, \u0027instance_uuid\u0027, \u0027limit\u0027,"},{"line_number":37,"context_line":"                                    \u0027marker\u0027, \u0027sort_key\u0027, \u0027sort_dir\u0027)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_ff962d4a","line":35,"range":{"start_line":35,"start_character":61,"end_line":35,"end_character":73},"updated":"2020-01-06 23:43:17.000000000","message":"Why do we need \u0027assignable\u0027 any more?","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    # TODO(Sundar): Ensure v1 and v2 APIs coexist."},{"line_number":34,"context_line":"    _supported_fields \u003d wtypes.Enum(wtypes.text, \u0027parent_uuid\u0027, \u0027root_uuid\u0027,"},{"line_number":35,"context_line":"                                    \u0027board\u0027, \u0027availability\u0027, \u0027assignable\u0027,"},{"line_number":36,"context_line":"                                    \u0027interface_type\u0027, \u0027instance_uuid\u0027, \u0027limit\u0027,"},{"line_number":37,"context_line":"                                    \u0027marker\u0027, \u0027sort_key\u0027, \u0027sort_dir\u0027)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_749d7fb8","line":35,"range":{"start_line":35,"start_character":61,"end_line":35,"end_character":73},"in_reply_to":"3fa7e38b_ff962d4a","updated":"2020-01-07 06:27:40.000000000","message":"It is used for v1 deployable API. I think we can remove this field now.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"}],"cyborg/api/controllers/v2/devices.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"758e0dbfe383400d5559eb762299cdbe83051e44","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return Device.convert_with_links(device)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @policy.authorize_wsgi(\"cyborg:device\", \"get_all\", False)"},{"line_number":108,"context_line":"    @expose.expose(DeviceCollection, wtypes.ArrayType(types.FilterType))"},{"line_number":109,"context_line":"    def get_all(self, filters\u003dNone):"},{"line_number":110,"context_line":"        \"\"\"Retrieve a list of devices.\"\"\""},{"line_number":111,"context_line":"        filters_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_63ca806e","line":108,"updated":"2019-11-22 17:46:08.000000000","message":"It would be good to add sort/limit, as we may have a large number of devices in the cluster.\n\nIMO, we don\u0027t need pagination, as the Cyborg client can handle it. So this is fine.\n\nHow would a user filter based on PCI IDs, vendor/model name, deployable attributes (like traits) and other attributes? Could you give examples?","commit_id":"a086791119919506a6d6360a36df9b1d81ed5547"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"5a5edb8b039680a23a207bc0e36902a6c625e8cf","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return Device.convert_with_links(device)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @policy.authorize_wsgi(\"cyborg:device\", \"get_all\", False)"},{"line_number":108,"context_line":"    @expose.expose(DeviceCollection, wtypes.ArrayType(types.FilterType))"},{"line_number":109,"context_line":"    def get_all(self, filters\u003dNone):"},{"line_number":110,"context_line":"        \"\"\"Retrieve a list of devices.\"\"\""},{"line_number":111,"context_line":"        filters_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_9b97d839","line":108,"in_reply_to":"3fa7e38b_63ca806e","updated":"2019-11-25 07:04:59.000000000","message":"sort/limit/marker are supported in filters. \nYou can test by ` curl  -s -H \"$CTYPE\" -H \"$AUTH\" \"http://10.238.145.73/accelerator/v2/devices?filters.field\u003dlimit\u0026filters.value\u003d1\"\nI will add the example in related doc patch.","commit_id":"a086791119919506a6d6360a36df9b1d81ed5547"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"85ad9a45688d75bafd331610c24595d0e56f9b50","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    @expose.expose(DeviceCollection, wtypes.text, wtypes.text, wtypes.text,"},{"line_number":109,"context_line":"                   wtypes.ArrayType(types.FilterType))"},{"line_number":110,"context_line":"    def get_all(self, type\u003dNone, vendor\u003dNone, hostname\u003dNone, filters\u003dNone):"},{"line_number":111,"context_line":"        \"\"\"Retrieve a list of devices.\"\"\""},{"line_number":112,"context_line":"        filters_dict \u003d {}"},{"line_number":113,"context_line":"        if type:"},{"line_number":114,"context_line":"            filters_dict[\"type\"] \u003d type"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_5ef3f26d","line":111,"range":{"start_line":111,"start_character":7,"end_line":111,"end_character":36},"updated":"2019-12-30 03:11:48.000000000","message":"Suggest to add param description like type,hostname,vendor,filters.","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e3781d82233223bb5f813f72a1018ea5d860fe83","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    @expose.expose(DeviceCollection, wtypes.text, wtypes.text, wtypes.text,"},{"line_number":109,"context_line":"                   wtypes.ArrayType(types.FilterType))"},{"line_number":110,"context_line":"    def get_all(self, type\u003dNone, vendor\u003dNone, hostname\u003dNone, filters\u003dNone):"},{"line_number":111,"context_line":"        \"\"\"Retrieve a list of devices.\"\"\""},{"line_number":112,"context_line":"        filters_dict \u003d {}"},{"line_number":113,"context_line":"        if type:"},{"line_number":114,"context_line":"            filters_dict[\"type\"] \u003d type"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_11dfab0c","line":111,"range":{"start_line":111,"start_character":7,"end_line":111,"end_character":36},"in_reply_to":"3fa7e38b_5ef3f26d","updated":"2019-12-30 07:44:36.000000000","message":"Done","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    uuid \u003d types.uuid"},{"line_number":39,"context_line":"    \"\"\"The UUID of the device\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    id \u003d types.integer"},{"line_number":42,"context_line":"    \"\"\"The ID of the device\"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    type \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1f946940","line":41,"updated":"2020-01-06 23:43:17.000000000","message":"Is there a need or use case to expose the id? This is a row number in the Cyborg db, so it is really a detail of the implementation.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    uuid \u003d types.uuid"},{"line_number":39,"context_line":"    \"\"\"The UUID of the device\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    id \u003d types.integer"},{"line_number":42,"context_line":"    \"\"\"The ID of the device\"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    type \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_27f59bcc","line":41,"in_reply_to":"3fa7e38b_1f946940","updated":"2020-01-07 06:27:40.000000000","message":"If we don\u0027t need get device by id, we can remove it.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"}],"cyborg/common/policy.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            try:"},{"line_number":269,"context_line":"                authorize(action, target, credentials, do_raise\u003dTrue)"},{"line_number":270,"context_line":"            except Exception:"},{"line_number":271,"context_line":"                return return_error(403)"},{"line_number":272,"context_line":"            return fn(self, *args, **kwargs)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        return handle"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1f6d4966","line":271,"updated":"2020-01-06 23:43:17.000000000","message":"Nit: Unnecessary deletion of blank line","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"aec00c4092127250b267245f930fd295cc053221","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                authorize(action, target, credentials, do_raise\u003dTrue)"},{"line_number":260,"context_line":"            except Exception:"},{"line_number":261,"context_line":"                return return_error(403)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            return fn(self, *args, **kwargs)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        return handle"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_ffa143f7","side":"PARENT","line":262,"updated":"2020-01-08 22:18:13.000000000","message":"Nit: unnecessary deletion of blank line.","commit_id":"f361adf39f46da9a06b1c7ef0fe0c5a6440817dd"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"c73723d61de11f68b87a9ba438399f8bc73d3253","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                authorize(action, target, credentials, do_raise\u003dTrue)"},{"line_number":260,"context_line":"            except Exception:"},{"line_number":261,"context_line":"                return return_error(403)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            return fn(self, *args, **kwargs)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        return handle"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b5ddfc13","side":"PARENT","line":262,"in_reply_to":"3fa7e38b_ffa143f7","updated":"2020-01-10 06:37:38.000000000","message":"Done","commit_id":"f361adf39f46da9a06b1c7ef0fe0c5a6440817dd"}],"cyborg/db/sqlalchemy/api.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        return _paginate_query(context, models.Device, query_prefix,"},{"line_number":427,"context_line":"                               limit, marker, sort_key, sort_dir)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def device_list(self, context, limit\u003dNone, marker\u003dNone, sort_key\u003dNone,"},{"line_number":430,"context_line":"                    sort_dir\u003dNone):"},{"line_number":431,"context_line":"        query \u003d model_query(context, models.Device)"},{"line_number":432,"context_line":"        return _paginate_query(context, models.Device, query,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_bf8bd514","line":429,"updated":"2020-01-06 23:43:17.000000000","message":"What is the need for this change?","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        return _paginate_query(context, models.Device, query_prefix,"},{"line_number":427,"context_line":"                               limit, marker, sort_key, sort_dir)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def device_list(self, context, limit\u003dNone, marker\u003dNone, sort_key\u003dNone,"},{"line_number":430,"context_line":"                    sort_dir\u003dNone):"},{"line_number":431,"context_line":"        query \u003d model_query(context, models.Device)"},{"line_number":432,"context_line":"        return _paginate_query(context, models.Device, query,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e7fa23b9","line":429,"in_reply_to":"3fa7e38b_bf8bd514","updated":"2020-01-07 06:27:40.000000000","message":"Just adjust it to fit flake8 more perfectly.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"}],"cyborg/tests/unit/api/controllers/v2/test_devices.py":[{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"85ad9a45688d75bafd331610c24595d0e56f9b50","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @mock.patch(\u0027cyborg.objects.Device.list\u0027)"},{"line_number":72,"context_line":"    def test_get_with_filters(self, mock_devices):"},{"line_number":73,"context_line":"        in_devices \u003d self.fake_devices"},{"line_number":74,"context_line":"        mock_devices.return_value \u003d [in_devices[0]]"},{"line_number":75,"context_line":"        data \u003d self.get_json("},{"line_number":76,"context_line":"            self.DEVICE_URL + \"?filters.field\u003dlimit\u0026filters.value\u003d1\","},{"line_number":77,"context_line":"            headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_9eabaa1c","line":74,"range":{"start_line":74,"start_character":36,"end_line":74,"end_character":51},"updated":"2019-12-30 03:11:48.000000000","message":"Suggest indevices[:1]","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e3781d82233223bb5f813f72a1018ea5d860fe83","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @mock.patch(\u0027cyborg.objects.Device.list\u0027)"},{"line_number":72,"context_line":"    def test_get_with_filters(self, mock_devices):"},{"line_number":73,"context_line":"        in_devices \u003d self.fake_devices"},{"line_number":74,"context_line":"        mock_devices.return_value \u003d [in_devices[0]]"},{"line_number":75,"context_line":"        data \u003d self.get_json("},{"line_number":76,"context_line":"            self.DEVICE_URL + \"?filters.field\u003dlimit\u0026filters.value\u003d1\","},{"line_number":77,"context_line":"            headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_71cdbf5c","line":74,"range":{"start_line":74,"start_character":36,"end_line":74,"end_character":51},"in_reply_to":"3fa7e38b_9eabaa1c","updated":"2019-12-30 07:44:36.000000000","message":"Done","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"85ad9a45688d75bafd331610c24595d0e56f9b50","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.DEVICE_URL + \"?type\u003dFPGA\","},{"line_number":89,"context_line":"            headers\u003dself.headers)"},{"line_number":90,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":91,"context_line":"        mock_devices.assert_called_once()"},{"line_number":92,"context_line":"        for in_device, out_device in zip(self.fake_devices, out_devices):"},{"line_number":93,"context_line":"            self._validate_device(in_device, out_device)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_3e7956c5","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":41},"updated":"2019-12-30 03:11:48.000000000","message":"We had better to assert that type\u003dFPGA is called. Like:\nassert_called_once_with(mock.ANY, filters\u003d{\u0027type\u0027: \u0027FPGA\u0027})","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"e3781d82233223bb5f813f72a1018ea5d860fe83","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.DEVICE_URL + \"?type\u003dFPGA\","},{"line_number":89,"context_line":"            headers\u003dself.headers)"},{"line_number":90,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":91,"context_line":"        mock_devices.assert_called_once()"},{"line_number":92,"context_line":"        for in_device, out_device in zip(self.fake_devices, out_devices):"},{"line_number":93,"context_line":"            self._validate_device(in_device, out_device)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d1e4b3e1","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":41},"in_reply_to":"3fa7e38b_3e7956c5","updated":"2019-12-30 07:44:36.000000000","message":"Done","commit_id":"9be995313a035f129a016a112b03caa0ab6db65c"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        result \u003d isinstance(out_devices, list)"},{"line_number":66,"context_line":"        self.assertTrue(result)"},{"line_number":67,"context_line":"        self.assertTrue(len(out_devices), len(self.fake_devices))"},{"line_number":68,"context_line":"        for in_device, out_device in zip(self.fake_devices, out_devices):"},{"line_number":69,"context_line":"            self._validate_device(in_device, out_device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_5fc5013c","line":66,"updated":"2020-01-06 23:43:17.000000000","message":"You can use assertIsInstance [1].\n\n[1] \nhttps://docs.python.org/2/library/unittest.html#unittest.TestCase.assertIsInstance","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        result \u003d isinstance(out_devices, list)"},{"line_number":66,"context_line":"        self.assertTrue(result)"},{"line_number":67,"context_line":"        self.assertTrue(len(out_devices), len(self.fake_devices))"},{"line_number":68,"context_line":"        for in_device, out_device in zip(self.fake_devices, out_devices):"},{"line_number":69,"context_line":"            self._validate_device(in_device, out_device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_07f89fbe","line":66,"in_reply_to":"3fa7e38b_5fc5013c","updated":"2020-01-07 06:27:40.000000000","message":"Sure.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            self._validate_device(in_device, out_device)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch(\u0027cyborg.objects.Device.list\u0027)"},{"line_number":72,"context_line":"    def test_get_with_filters(self, mock_devices):"},{"line_number":73,"context_line":"        in_devices \u003d self.fake_devices"},{"line_number":74,"context_line":"        mock_devices.return_value \u003d in_devices[:1]"},{"line_number":75,"context_line":"        data \u003d self.get_json("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_ffbdcdb1","line":72,"updated":"2020-01-06 23:43:17.000000000","message":"Need tests for getting by host and vendor.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            self._validate_device(in_device, out_device)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch(\u0027cyborg.objects.Device.list\u0027)"},{"line_number":72,"context_line":"    def test_get_with_filters(self, mock_devices):"},{"line_number":73,"context_line":"        in_devices \u003d self.fake_devices"},{"line_number":74,"context_line":"        mock_devices.return_value \u003d in_devices[:1]"},{"line_number":75,"context_line":"        data \u003d self.get_json("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_6720734c","line":72,"in_reply_to":"3fa7e38b_ffbdcdb1","updated":"2020-01-07 06:27:40.000000000","message":"will add.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"aec00c4092127250b267245f930fd295cc053221","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        mock_devices.return_value \u003d self.fake_devices"},{"line_number":62,"context_line":"        data \u003d self.get_json(self.DEVICE_URL, headers\u003dself.headers)"},{"line_number":63,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":64,"context_line":"        result \u003d isinstance(out_devices, list)"},{"line_number":65,"context_line":"        self.assertTrue(result)"},{"line_number":66,"context_line":"        for out_dev in out_devices:"},{"line_number":67,"context_line":"            self.assertIsInstance(out_dev, dict)"},{"line_number":68,"context_line":"        self.assertTrue(len(out_devices), len(self.fake_devices))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_4eed32b6","line":65,"range":{"start_line":64,"start_character":8,"end_line":65,"end_character":31},"updated":"2020-01-08 22:18:13.000000000","message":"Better to use assertInstance, as I said before.","commit_id":"92cbf0d1dba140e736a5dc62d5a0bfe4f7a13ce3"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"c73723d61de11f68b87a9ba438399f8bc73d3253","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        mock_devices.return_value \u003d self.fake_devices"},{"line_number":62,"context_line":"        data \u003d self.get_json(self.DEVICE_URL, headers\u003dself.headers)"},{"line_number":63,"context_line":"        out_devices \u003d data[\u0027devices\u0027]"},{"line_number":64,"context_line":"        result \u003d isinstance(out_devices, list)"},{"line_number":65,"context_line":"        self.assertTrue(result)"},{"line_number":66,"context_line":"        for out_dev in out_devices:"},{"line_number":67,"context_line":"            self.assertIsInstance(out_dev, dict)"},{"line_number":68,"context_line":"        self.assertTrue(len(out_devices), len(self.fake_devices))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_55e048cb","line":65,"range":{"start_line":64,"start_character":8,"end_line":65,"end_character":31},"in_reply_to":"3fa7e38b_4eed32b6","updated":"2020-01-10 06:37:38.000000000","message":"Done","commit_id":"92cbf0d1dba140e736a5dc62d5a0bfe4f7a13ce3"}],"cyborg/tests/unit/fake_device.py":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"a92f8d61c6e0c81ce8a6b7eead6618f6e30907f6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"def fake_db_device(**updates):"},{"line_number":49,"context_line":"    root_uuid \u003d uuidutils.generate_uuid()"},{"line_number":50,"context_line":"    db_device \u003d {"},{"line_number":51,"context_line":"        \u0027id\u0027: 1,"},{"line_number":52,"context_line":"        \u0027uuid\u0027: root_uuid,"},{"line_number":53,"context_line":"        \u0027type\u0027: \u0027FPGA\u0027,"},{"line_number":54,"context_line":"        \u0027vendor\u0027: \"vendor\","}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_dfded10e","line":51,"updated":"2020-01-06 23:43:17.000000000","message":"This has become redundant with the additions above. Please try to use one set of fake data to the extent possible. (Otherwise, maintaining unit tests could become complicated.)","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"b0e56dbdd8ad839f7385c103c322c5acb1f2e771","unresolved":false,"context_lines":[{"line_number":48,"context_line":"def fake_db_device(**updates):"},{"line_number":49,"context_line":"    root_uuid \u003d uuidutils.generate_uuid()"},{"line_number":50,"context_line":"    db_device \u003d {"},{"line_number":51,"context_line":"        \u0027id\u0027: 1,"},{"line_number":52,"context_line":"        \u0027uuid\u0027: root_uuid,"},{"line_number":53,"context_line":"        \u0027type\u0027: \u0027FPGA\u0027,"},{"line_number":54,"context_line":"        \u0027vendor\u0027: \"vendor\","}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_a7cf4b89","line":51,"in_reply_to":"3fa7e38b_dfded10e","updated":"2020-01-07 06:27:40.000000000","message":"Sure, but we should have multiple fake device, not one.","commit_id":"339230a4fdaed9832142fac17e9a19da476d0fe9"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"aec00c4092127250b267245f930fd295cc053221","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \"type\": \"GPU\","},{"line_number":41,"context_line":"        \"std_board_info\": \"{\u0027class\u0027: \u0027Fake class\u0027, \u0027device_id\u0027: \u00270xdcba\u0027}\""},{"line_number":42,"context_line":"        }]"},{"line_number":43,"context_line":"    for dev in devices:"},{"line_number":44,"context_line":"        for name, field in objects.Device.fields.items():"},{"line_number":45,"context_line":"            if name in dev:"},{"line_number":46,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_ae2066f9","line":43,"updated":"2020-01-08 22:18:13.000000000","message":"Sorry if I was not clear. I did not say that fake_db_device() function should be removed. That function was using its own tests data for db_device instead of reusing the data set up by get_fake_devices_as_dict(); only that redundant test data needs to be unified.","commit_id":"92cbf0d1dba140e736a5dc62d5a0bfe4f7a13ce3"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"c73723d61de11f68b87a9ba438399f8bc73d3253","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \"type\": \"GPU\","},{"line_number":41,"context_line":"        \"std_board_info\": \"{\u0027class\u0027: \u0027Fake class\u0027, \u0027device_id\u0027: \u00270xdcba\u0027}\""},{"line_number":42,"context_line":"        }]"},{"line_number":43,"context_line":"    for dev in devices:"},{"line_number":44,"context_line":"        for name, field in objects.Device.fields.items():"},{"line_number":45,"context_line":"            if name in dev:"},{"line_number":46,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_75e304d8","line":43,"in_reply_to":"3fa7e38b_ae2066f9","updated":"2020-01-10 06:37:38.000000000","message":"Done","commit_id":"92cbf0d1dba140e736a5dc62d5a0bfe4f7a13ce3"}]}
