)]}'
{"cyborg/objects/driver_accelerator.py":[{"author":{"_account_id":28687,"name":"JiangGuocai","email":"jiang.guocai@zte.com.cn","username":"JiangGuocai"},"change_message_id":"85e52415c14e5b2e8b8a0a9aeec66c687b180c77","unresolved":false,"context_lines":[{"line_number":100,"context_line":"\r"},{"line_number":101,"context_line":"    def get_acc_index(self, acc_name):\r"},{"line_number":102,"context_line":"        for index in range(len(acclerator_list)):\r"},{"line_number":103,"context_line":"            if (self.acclerator_list[index].name \u003d\u003d acc_name):\r"},{"line_number":104,"context_line":"                return index\r"},{"line_number":105,"context_line":"\r"},{"line_number":106,"context_line":"    @classmethod\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_33d28601","line":103,"range":{"start_line":103,"start_character":21,"end_line":103,"end_character":36},"updated":"2018-08-27 12:03:50.000000000","message":"the class member should be accelerator_list ?","commit_id":"9fabe4fe3f9c6b77d58ef4e79eaf337dc6b028e5"},{"author":{"_account_id":28687,"name":"JiangGuocai","email":"jiang.guocai@zte.com.cn","username":"JiangGuocai"},"change_message_id":"85e52415c14e5b2e8b8a0a9aeec66c687b180c77","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    for added_name in added_accs:\r"},{"line_number":156,"context_line":"        # Get acc_name then search in new_driver_obj to get this\r"},{"line_number":157,"context_line":"        # DriverAccelerator\u0027s index.\r"},{"line_number":158,"context_line":"        added_acc_driver_obj \u003d new_driver_obj.accelerator_list[\r"},{"line_number":159,"context_line":"            new_driver_obj.get_acc_index(added_name)]\r"},{"line_number":160,"context_line":"        added_acc_driver_obj.create(context\u003dcontext,\r"},{"line_number":161,"context_line":"                                    host\u003dnew_driver_obj.host,\r"},{"line_number":162,"context_line":"                                    type\u003dnew_driver_obj.type)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b600c402","line":159,"range":{"start_line":158,"start_character":31,"end_line":159,"end_character":53},"updated":"2018-08-27 12:03:50.000000000","message":"get_acc_index modify get_acc.  and return driver obj.\neg.\nadded_acc_driver_obj \u003d new_driver_obj.get_acc(added_name).","commit_id":"9fabe4fe3f9c6b77d58ef4e79eaf337dc6b028e5"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"@base.CyborgObjectRegistry.register\r"},{"line_number":26,"context_line":"class DriverAccelerator(base.CyborgObject,\r"},{"line_number":27,"context_line":"                      object_base.VersionedObjectDictCompat):\r"},{"line_number":28,"context_line":"    # Version 1.0: Initial version\r"},{"line_number":29,"context_line":"    VERSION \u003d \u00271.0\u0027\r"},{"line_number":30,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_8b1fe56a","line":27,"range":{"start_line":27,"start_character":22,"end_line":27,"end_character":59},"updated":"2018-08-23 12:04:30.000000000","message":"pep8.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027interface_type\u0027: object_fields.StringField(nullable\u003dFalse),\r"},{"line_number":36,"context_line":"        \u0027remotable\u0027: object_fields.IntegerField(nullable\u003dFalse),\r"},{"line_number":37,"context_line":"        # same as remotable in Accelerator table.\r"},{"line_number":38,"context_line":"        \u0027Acc_topology\u0027: object_fields.ObjectField(\u0027DriverTopology\u0027,\r"},{"line_number":39,"context_line":"                                                  nullable\u003dTrue),\r"},{"line_number":40,"context_line":"        # Acc_topology is used for driver-specific resource provider.\r"},{"line_number":41,"context_line":"        \u0027PF_list\u0027: object_fields.ListOfObjectsField(\u0027DriverPF\u0027, default\u003d[],\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_51b288e6","line":38,"range":{"start_line":38,"start_character":9,"end_line":38,"end_character":21},"updated":"2018-08-28 03:56:36.000000000","message":"acc_topology","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                            nullable\u003d True)\r"},{"line_number":43,"context_line":"    }\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def get_pf_index(self, pf_address):\r"},{"line_number":46,"context_line":"        for index in range(len(self.PF_list)):\r"},{"line_number":47,"context_line":"            if self.PF_list[index].address \u003d\u003d pf_address:\r"},{"line_number":48,"context_line":"                return index\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d1bd38b1","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":20},"updated":"2018-08-28 03:56:36.000000000","message":"Naming it like _get_pf_index_by_address makes more sense(if the function is local, put an underscore in front).","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    }\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def get_pf_index(self, pf_address):\r"},{"line_number":46,"context_line":"        for index in range(len(self.PF_list)):\r"},{"line_number":47,"context_line":"            if self.PF_list[index].address \u003d\u003d pf_address:\r"},{"line_number":48,"context_line":"                return index\r"},{"line_number":49,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4bb78df6","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":46},"updated":"2018-08-23 12:04:30.000000000","message":"looks twist.  how about use python build in function enumerate.\nfor index, pf in enumerate(self.PF_list):\n    if pf.address \u003d pf_address:\n\nI wonder why we need to get index？","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    }\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def get_pf_index(self, pf_address):\r"},{"line_number":46,"context_line":"        for index in range(len(self.PF_list)):\r"},{"line_number":47,"context_line":"            if self.PF_list[index].address \u003d\u003d pf_address:\r"},{"line_number":48,"context_line":"                return index\r"},{"line_number":49,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2f0ec73a","line":46,"range":{"start_line":46,"start_character":7,"end_line":46,"end_character":46},"updated":"2018-08-24 08:06:39.000000000","message":"maybe for pf in self.PF_list:\n          if pf.address \u003d\u003d pf_address:\n              return self.PF_list.index(pf)","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \"\"\"create a new driver-side accelerator into db. This not only\r"},{"line_number":52,"context_line":"        add into the Accelerator table but also into Deployable table.\"\"\"\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"        acc_obj \u003d Accelerator(name\u003dself.name,\r"},{"line_number":55,"context_line":"                              device_type\u003dtype,\r"},{"line_number":56,"context_line":"                              vendor_id\u003dself.vendor_id,\r"},{"line_number":57,"context_line":"                              product_id\u003dself.product_id,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_31fd8c6d","line":54,"range":{"start_line":54,"start_character":18,"end_line":54,"end_character":29},"updated":"2018-08-28 03:56:36.000000000","message":"I did not see you importing Accelerator object anywhere in this code, are you should this is even working?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \"\"\"create a new driver-side accelerator into db. This not only\r"},{"line_number":52,"context_line":"        add into the Accelerator table but also into Deployable table.\"\"\"\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"        acc_obj \u003d Accelerator(name\u003dself.name,\r"},{"line_number":55,"context_line":"                              device_type\u003dtype,\r"},{"line_number":56,"context_line":"                              vendor_id\u003dself.vendor_id,\r"},{"line_number":57,"context_line":"                              product_id\u003dself.product_id,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_cb707d43","line":54,"range":{"start_line":54,"start_character":18,"end_line":54,"end_character":29},"updated":"2018-08-23 12:04:30.000000000","message":"Should Accelerator need host field?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \"\"\"create a new driver-side accelerator into db. This not only\r"},{"line_number":52,"context_line":"        add into the Accelerator table but also into Deployable table.\"\"\"\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"        acc_obj \u003d Accelerator(name\u003dself.name,\r"},{"line_number":55,"context_line":"                              device_type\u003dtype,\r"},{"line_number":56,"context_line":"                              vendor_id\u003dself.vendor_id,\r"},{"line_number":57,"context_line":"                              product_id\u003dself.product_id,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c1528713","line":54,"range":{"start_line":54,"start_character":18,"end_line":54,"end_character":29},"in_reply_to":"3f79a3b5_cb707d43","updated":"2018-08-24 08:06:39.000000000","message":"I think no, but should accelerator need acc_capability, acc_type, user_id which are also stored in Acc DB.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                              remotable\u003dself.remotable)\r"},{"line_number":59,"context_line":"        acc_obj.create(context)\r"},{"line_number":60,"context_line":"        # for each PF in PF_list, call driver_pf to create.\r"},{"line_number":61,"context_line":"        for driver_pf in PF_list:\r"},{"line_number":62,"context_line":"            driver_pf.create(context, acc_obj.id, host, self)\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"    @classmethod\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_416757ea","line":61,"range":{"start_line":61,"start_character":25,"end_line":61,"end_character":32},"updated":"2018-08-24 08:06:39.000000000","message":"s/PF_list/self.PF_list","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        interface_filter[\"board\"] \u003d acc_obj.product_id\r"},{"line_number":71,"context_line":"        interface_filter[\"vendor\"] \u003d acc_obj.vendor_id\r"},{"line_number":72,"context_line":"        # interface_type is same for same(vendor,board).\r"},{"line_number":73,"context_line":"        interface_type \u003d Deployable.get_by_filter(context, interface_filter)[\r"},{"line_number":74,"context_line":"            0].interface_type\r"},{"line_number":75,"context_line":"\r"},{"line_number":76,"context_line":"        # form PF_list, first find PF\u0027s in Deployable with Acc_id.\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_8bc365ed","line":73,"range":{"start_line":73,"start_character":25,"end_line":73,"end_character":76},"updated":"2018-08-23 12:04:30.000000000","message":"Is it possible to get a empty list?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        driver_pf_list \u003d []\r"},{"line_number":78,"context_line":"        pf_list_filter \u003d {}\r"},{"line_number":79,"context_line":"        pf_list_filter[\"accelerator_id\"] \u003d acc_obj.id\r"},{"line_number":80,"context_line":"        pf_obj_list \u003d Physical_function.get_by_filter(context, pf_list_filter)\r"},{"line_number":81,"context_line":"\r"},{"line_number":82,"context_line":"        # add to driver_pf_list\r"},{"line_number":83,"context_line":"        for pf_obj in pf_obj_list:\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5135a843","line":80,"range":{"start_line":80,"start_character":22,"end_line":80,"end_character":39},"updated":"2018-08-28 03:56:36.000000000","message":"And it should be PhysicalFunction if you import it properly","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        driver_pf_list \u003d []\r"},{"line_number":78,"context_line":"        pf_list_filter \u003d {}\r"},{"line_number":79,"context_line":"        pf_list_filter[\"accelerator_id\"] \u003d acc_obj.id\r"},{"line_number":80,"context_line":"        pf_obj_list \u003d Physical_function.get_by_filter(context, pf_list_filter)\r"},{"line_number":81,"context_line":"\r"},{"line_number":82,"context_line":"        # add to driver_pf_list\r"},{"line_number":83,"context_line":"        for pf_obj in pf_obj_list:\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_81f48ff2","line":80,"range":{"start_line":80,"start_character":22,"end_line":80,"end_character":39},"updated":"2018-08-24 08:06:39.000000000","message":"I didn\u0027t see the definition yet.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            driver_pf_list.append(DriverPF.form_get(context, pf_obj))\r"},{"line_number":85,"context_line":"\r"},{"line_number":86,"context_line":"        # form DriverAccelerator\r"},{"line_number":87,"context_line":"        driver_accelerator \u003d {}\r"},{"line_number":88,"context_line":"        driver_accelerator[\"name\"] \u003d acc_obj.name\r"},{"line_number":89,"context_line":"        driver_accelerator[\"vendor_id\"] \u003d acc_obj.vendor_id\r"},{"line_number":90,"context_line":"        driver_accelerator[\"product_id\"] \u003d acc_obj.product_id\r"},{"line_number":91,"context_line":"        driver_accelerator[\"interface_type\"] \u003d interface_type\r"},{"line_number":92,"context_line":"        driver_accelerator[\"remotable\"] \u003d acc_obj.remotable\r"},{"line_number":93,"context_line":"        # Acc_topology is null at beginning.\r"},{"line_number":94,"context_line":"        # driver_accelerator[\"Acc_topology\"]\r"},{"line_number":95,"context_line":"        driver_accelerator[\"PF_list\"] \u003d driver_pf_list\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2b425169","line":92,"range":{"start_line":87,"start_character":7,"end_line":92,"end_character":59},"updated":"2018-08-23 12:04:30.000000000","message":"How about bout:\ndriver_accelerator \u003d {\n       \"name\": acc_obj.name,\n       \"vendor_id\": acc_obj.vendor_id\n        ...}\n\nThis is just a suggestion.\n\nWhat\u0027s the difference between driver_accelerator and Accelerator?\n\nIf not many difference, we can get the dict for Accelerator object and make same trim, then form DriverAccelerator","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return DriverAccelerator(**driver_accelerator)\r"},{"line_number":98,"context_line":"\r"},{"line_number":99,"context_line":"    @classmethod\r"},{"line_number":100,"context_line":"    def diff_save(cls, context, host, new_driver_acc_obj, old_driver_acc_obj):\r"},{"line_number":101,"context_line":"        \"\"\"Diff save for two DriverAccelerator object. This should\r"},{"line_number":102,"context_line":"        operate the DriverPF/DriverVF as well.\"\"\"\r"},{"line_number":103,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ceb16b46","line":100,"range":{"start_line":100,"start_character":58,"end_line":100,"end_character":76},"updated":"2018-08-23 12:04:30.000000000","message":"how do you get old_driver_acc_obj?\nform_get?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # diff other field? Accelerators\u0027 product_id/remotable can change.\r"},{"line_number":107,"context_line":"        acc_filters \u003d {}\r"},{"line_number":108,"context_line":"        acc_filters[\"name\"] \u003d new_driver_acc_obj.name\r"},{"line_number":109,"context_line":"        acc_obj \u003d Accelerator.get_by_filter(context, acc_filters)[0]\r"},{"line_number":110,"context_line":"        dep_filters \u003d {}\r"},{"line_number":111,"context_line":"        dep_filters[\"id\"] \u003d acc_obj.id\r"},{"line_number":112,"context_line":"        dep_obj_list \u003d Deployable.get_by_filter(context, dep_filters)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b1451cb6","line":109,"range":{"start_line":109,"start_character":65,"end_line":109,"end_character":68},"updated":"2018-08-28 03:56:36.000000000","message":"Do a null check before you referencing the index.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # diff other field? Accelerators\u0027 product_id/remotable can change.\r"},{"line_number":107,"context_line":"        acc_filters \u003d {}\r"},{"line_number":108,"context_line":"        acc_filters[\"name\"] \u003d new_driver_acc_obj.name\r"},{"line_number":109,"context_line":"        acc_obj \u003d Accelerator.get_by_filter(context, acc_filters)[0]\r"},{"line_number":110,"context_line":"        dep_filters \u003d {}\r"},{"line_number":111,"context_line":"        dep_filters[\"id\"] \u003d acc_obj.id\r"},{"line_number":112,"context_line":"        dep_obj_list \u003d Deployable.get_by_filter(context, dep_filters)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_a12e6b40","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":31},"updated":"2018-08-24 08:06:39.000000000","message":"definition?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        acc_obj \u003d Accelerator.get_by_filter(context, acc_filters)[0]\r"},{"line_number":110,"context_line":"        dep_filters \u003d {}\r"},{"line_number":111,"context_line":"        dep_filters[\"id\"] \u003d acc_obj.id\r"},{"line_number":112,"context_line":"        dep_obj_list \u003d Deployable.get_by_filter(context, dep_filters)\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"        if new_driver_acc_obj.product_id !\u003d old_driver_acc_obj.product_id:\r"},{"line_number":115,"context_line":"            # first update acc_obj, then update the it\u0027s deployable_obj.\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_6124d360","line":112,"range":{"start_line":112,"start_character":23,"end_line":112,"end_character":33},"updated":"2018-08-24 08:06:39.000000000","message":"definition?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        dep_filters[\"id\"] \u003d acc_obj.id\r"},{"line_number":112,"context_line":"        dep_obj_list \u003d Deployable.get_by_filter(context, dep_filters)\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"        if new_driver_acc_obj.product_id !\u003d old_driver_acc_obj.product_id:\r"},{"line_number":115,"context_line":"            # first update acc_obj, then update the it\u0027s deployable_obj.\r"},{"line_number":116,"context_line":"            acc_obj.product_id \u003d new_driver_acc_obj.product_id\r"},{"line_number":117,"context_line":"            acc_obj.save()\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2eefbf1d","line":114,"range":{"start_line":114,"start_character":30,"end_line":114,"end_character":40},"updated":"2018-08-23 12:04:30.000000000","message":"only change prodect_id and remotable? \nwhy they are volatile?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                dep_obj.board \u003d acc_obj.product_id\r"},{"line_number":120,"context_line":"                dep_obj.save()\r"},{"line_number":121,"context_line":"\r"},{"line_number":122,"context_line":"        if new_driver_acc_obj.remotable !\u003d old_driver_acc_obj.remotable:\r"},{"line_number":123,"context_line":"            acc_obj.remotable \u003d new_driver_acc_obj.remotable\r"},{"line_number":124,"context_line":"            acc_obj.save()\r"},{"line_number":125,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7115449b","line":122,"range":{"start_line":122,"start_character":30,"end_line":122,"end_character":39},"updated":"2018-08-28 03:56:36.000000000","message":"Suggestion: do a for loop to loop through all the fields that need to be compared.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        old_pf_address_list \u003d [old_pf.address for old_pf in\r"},{"line_number":131,"context_line":"                        old_driver_acc_obj.PF_list]\r"},{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"        same_pfs \u003d set(new_pf_address_list) \u0026 set(old_pf_address_list)\r"},{"line_number":134,"context_line":"        # same pf: diff internal layer(vfs \u0026 attribute_list) for driver_pf.\r"},{"line_number":135,"context_line":"        for same_pf in same_pfs:\r"},{"line_number":136,"context_line":"            new_driver_pf_obj \u003d new_driver_acc_obj.PF_list[\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_0ec3e38a","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":70},"updated":"2018-08-23 12:04:30.000000000","message":"I guess:\nif old_pf_address_list is form_get\nthen same_pfs will always empty","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"        same_pfs \u003d set(new_pf_address_list) \u0026 set(old_pf_address_list)\r"},{"line_number":134,"context_line":"        # same pf: diff internal layer(vfs \u0026 attribute_list) for driver_pf.\r"},{"line_number":135,"context_line":"        for same_pf in same_pfs:\r"},{"line_number":136,"context_line":"            new_driver_pf_obj \u003d new_driver_acc_obj.PF_list[\r"},{"line_number":137,"context_line":"                new_driver_acc_obj.get_pf_index(same_pf)]\r"},{"line_number":138,"context_line":"            old_driver_pf_obj \u003d old_driver_acc_obj.PF_list[\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_cee96be3","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":31},"updated":"2018-08-23 12:04:30.000000000","message":"since they are same, why need to diff?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        same_pfs \u003d set(new_pf_address_list) \u0026 set(old_pf_address_list)\r"},{"line_number":134,"context_line":"        # same pf: diff internal layer(vfs \u0026 attribute_list) for driver_pf.\r"},{"line_number":135,"context_line":"        for same_pf in same_pfs:\r"},{"line_number":136,"context_line":"            new_driver_pf_obj \u003d new_driver_acc_obj.PF_list[\r"},{"line_number":137,"context_line":"                new_driver_acc_obj.get_pf_index(same_pf)]\r"},{"line_number":138,"context_line":"            old_driver_pf_obj \u003d old_driver_acc_obj.PF_list[\r"},{"line_number":139,"context_line":"                old_driver_acc_obj.get_pf_index(same_pf)]\r"},{"line_number":140,"context_line":"            # diff_save for two DriverPF\r"},{"line_number":141,"context_line":"            DriverPF.diff_save(context, new_driver_pf_obj,\r"},{"line_number":142,"context_line":"                                        old_driver_pf_obj)\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_618053f8","line":139,"range":{"start_line":136,"start_character":0,"end_line":139,"end_character":57},"updated":"2018-08-24 08:06:39.000000000","message":"why should we get the same_pf\u0027s index to find the pf_obj? Could you please elaborate it?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        # add PF: added_pfs in new_driver_acc_obj\r"},{"line_number":145,"context_line":"        added_pfs \u003d set(new_pf_address_list) - same_pfs\r"},{"line_number":146,"context_line":"        # get acc_id, host for new_driver_acc_obj.\r"},{"line_number":147,"context_line":"        new_acc_id \u003d Accelerator.get_by_filter(context, filters\u003d{\"name\":\r"},{"line_number":148,"context_line":"                                            new_driver_acc_obj.name})[0].id\r"},{"line_number":149,"context_line":"\r"},{"line_number":150,"context_line":"        for added_pf in added_pfs:\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_61d93354","line":147,"range":{"start_line":147,"start_character":33,"end_line":147,"end_character":46},"updated":"2018-08-24 08:06:39.000000000","message":"I think that for each \"get_by_filter\", it\u0027s possible to return an empty list, we should consider about that.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"c40e57ed1d07f9ab7e0a2843f4d667a3f6db140d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        # add PF: added_pfs in new_driver_acc_obj\r"},{"line_number":145,"context_line":"        added_pfs \u003d set(new_pf_address_list) - same_pfs\r"},{"line_number":146,"context_line":"        # get acc_id, host for new_driver_acc_obj.\r"},{"line_number":147,"context_line":"        new_acc_id \u003d Accelerator.get_by_filter(context, filters\u003d{\"name\":\r"},{"line_number":148,"context_line":"                                            new_driver_acc_obj.name})[0].id\r"},{"line_number":149,"context_line":"\r"},{"line_number":150,"context_line":"        for added_pf in added_pfs:\r"},{"line_number":151,"context_line":"            # Get pf.address then search in PF_list to get this it\u0027s index.\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_6ea137a9","line":148,"range":{"start_line":147,"start_character":64,"end_line":148,"end_character":68},"updated":"2018-08-23 12:04:30.000000000","message":"haha, you are using this style. :)\nall about can use this style.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":178,"context_line":"\r"},{"line_number":179,"context_line":"\r"},{"line_number":180,"context_line":"@base.CyborgObjectRegistry.register\r"},{"line_number":181,"context_line":"class DriverHost(base.CyborgObject, base.ObjectListBase):\r"},{"line_number":182,"context_line":"    # Version 1.0: Initial version\r"},{"line_number":183,"context_line":"    VERSION \u003d \u00271.0\u0027\r"},{"line_number":184,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_a1066b85","line":181,"range":{"start_line":181,"start_character":6,"end_line":181,"end_character":16},"updated":"2018-08-24 08:06:39.000000000","message":"what\u0027s the usage of this class ?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":214,"context_line":"\r"},{"line_number":215,"context_line":"\r"},{"line_number":216,"context_line":"\r"},{"line_number":217,"context_line":"def get_acc_obj_list(context, host, type):\r"},{"line_number":218,"context_line":"    \"\"\"This is used to find Accelerator objects in one host with acc_type.\"\"\"\r"},{"line_number":219,"context_line":"\r"},{"line_number":220,"context_line":"    # First get acc_ids in deployable table with filter:host\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1124100c","line":217,"range":{"start_line":217,"start_character":4,"end_line":217,"end_character":20},"updated":"2018-08-28 03:56:36.000000000","message":"get_acc_obj_list_by_type","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    return [acc_obj_set]\r"},{"line_number":230,"context_line":"\r"},{"line_number":231,"context_line":"\r"},{"line_number":232,"context_line":"def diff_save(context, new_driver_obj, old_driver_obj):\r"},{"line_number":233,"context_line":"    \"\"\"Compare and save two DriverHost Object. For each type of driver in one\r"},{"line_number":234,"context_line":"    node(agent) should update one DriverHost.\"\"\"\r"},{"line_number":235,"context_line":"\r"},{"line_number":236,"context_line":"    new_acc_name_list \u003d [new_acc_driver_obj.name for new_acc_driver_obj in \\\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_917d80e8","line":233,"range":{"start_line":232,"start_character":4,"end_line":233,"end_character":14},"updated":"2018-08-28 03:56:36.000000000","message":"Maybe add something similar for the PF/VF/Deployables?","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"}],"cyborg/objects/driver_attribute.py":[{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"a011dc789074b4135657336613458e368915f9e7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def destroy(self, context, deployable_id):"},{"line_number":47,"context_line":"        \"\"\"Delete driver-side attribute from the DB.\"\"\""},{"line_number":48,"context_line":"        attr_obj_list \u003d Attribute.get_by_deployable_id(context, deployable_id)"},{"line_number":49,"context_line":"        for del_idx in range(len(attr_obj_list)):"},{"line_number":50,"context_line":"            attr_obj_list[del_idx].destory()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2b694dbd","line":49,"updated":"2018-08-20 15:59:35.000000000","message":"I think you can use \nfor del_idx in attr_obj_list:\n   ...\nhere.","commit_id":"9fabe4fe3f9c6b77d58ef4e79eaf337dc6b028e5"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"f2c8c2434787e559ea361477a97e4b0100bed404","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def create(self, context, deployable_id):"},{"line_number":39,"context_line":"        \"\"\"Convert driver-side Attribute into Attribute Object so as to"},{"line_number":40,"context_line":"        write to DB.\"\"\""},{"line_number":41,"context_line":"        attr_obj \u003d Attribute()"},{"line_number":42,"context_line":"        attr_obj.deployable_id \u003d deployable_id"},{"line_number":43,"context_line":"        attr_obj.set_key_value_pair(self.key, self.value)"},{"line_number":44,"context_line":"        attr_obj.create(context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_41251708","line":41,"range":{"start_line":41,"start_character":19,"end_line":41,"end_character":28},"updated":"2018-08-24 08:06:39.000000000","message":"maybe you need to import it.","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"}],"cyborg/objects/driver_objects/driver_accelerator.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"04a1fa838841a5ea433864e9bc3df7c758dda5c5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\r"},{"line_number":36,"context_line":"    fields \u003d {\r"},{"line_number":37,"context_line":"        \u0027name\u0027: object_fields.StringField(nullable\u003dFalse),\r"},{"line_number":38,"context_line":"        \u0027vendor_id\u0027: object_fields.StringField(nullable\u003dFalse),\r"},{"line_number":39,"context_line":"        \u0027product_id\u0027: object_fields.StringField(nullable\u003dFalse),\r"},{"line_number":40,"context_line":"        \u0027interface_type\u0027: object_fields.StringField(nullable\u003dFalse),\r"},{"line_number":41,"context_line":"        \u0027remotable\u0027: object_fields.IntegerField(nullable\u003dFalse),\r"},{"line_number":42,"context_line":"        # same as remotable in Accelerator table.\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_796bad84","line":39,"range":{"start_line":38,"start_character":8,"end_line":39,"end_character":64},"updated":"2018-08-30 08:56:52.000000000","message":"this is specific to pci devices.\n\nusb devices have a similar concept but likely this should be moved into a PCIAcclerator subclass. or be replased with a single sku field wcich can be polymorphic.","commit_id":"3ca009ecf53090ad785f1482d38d5be26fb60259"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"48eb89f3c46f861b06f4e805412ad4d975e4e4e6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        if len(acc_obj_list) \u003d\u003d 0:\r"},{"line_number":200,"context_line":"            return\r"},{"line_number":201,"context_line":"\r"},{"line_number":202,"context_line":"        acc_obj \u003d acc_obj_list[0]\r"},{"line_number":203,"context_line":"        # first delete DriverPFs if existing some.\r"},{"line_number":204,"context_line":"        if hasattr(self, \"pf_list\"):\r"},{"line_number":205,"context_line":"            for driver_pf in self.pf_list:\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_dee187fe","line":202,"range":{"start_line":202,"start_character":8,"end_line":202,"end_character":33},"updated":"2018-08-30 08:07:11.000000000","message":"why the first one?","commit_id":"3ca009ecf53090ad785f1482d38d5be26fb60259"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"48eb89f3c46f861b06f4e805412ad4d975e4e4e6","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                             old_driver_obj.accelerator_list]\r"},{"line_number":255,"context_line":"\r"},{"line_number":256,"context_line":"        # compare and operate acc table first.\r"},{"line_number":257,"context_line":"        same_accs \u003d set(new_acc_name_list) \u0026 set(old_acc_name_list)\r"},{"line_number":258,"context_line":"        # same acc: diff internal layer for driver_obj.\r"},{"line_number":259,"context_line":"        for same_name in same_accs:\r"},{"line_number":260,"context_line":"            new_driver_acc_obj \u003d new_driver_obj.accelerator_list[\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_be484b2e","line":257,"range":{"start_line":257,"start_character":20,"end_line":257,"end_character":67},"updated":"2018-08-30 08:07:11.000000000","message":"Is driver_accelerator.name unique. Is there any possibility that acc.name is the same?","commit_id":"3ca009ecf53090ad785f1482d38d5be26fb60259"}],"cyborg/objects/driver_pf.py":[{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"1c1d3dde26e689703da941751f3edc9903193d70","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        # add VF: added_vfs in new_driver_pf_obj"},{"line_number":164,"context_line":"        added_vfs \u003d set(new_vf_address_list) - same_vfs"},{"line_number":165,"context_line":"        "},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_518368cb","line":169,"range":{"start_line":166,"start_character":0,"end_line":169,"end_character":0},"updated":"2018-08-28 03:56:36.000000000","message":"Too many extra lines","commit_id":"a143aab590729910a0b3735b469c1307a1e891ec"}],"cyborg/tests/unit/accelerator/drivers/fpga/intel/prepare_test_data.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"04a1fa838841a5ea433864e9bc3df7c758dda5c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f79a3b5_59bfd1cf","side":"PARENT","updated":"2018-08-30 08:56:52.000000000","message":"the file permissions have been changed,\nnot sure if that was intntional or not.","commit_id":"08588d0904f986aa964645557f817aec6660419c"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"19afa472ca616f2f5ed73099a3f93238c56e61a1","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import glob"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import shutil"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"PF0_ADDR \u003d \"0000:5e:00.0\""},{"line_number":24,"context_line":"PF1_ADDR \u003d \"0000:be:00.0\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_7933adf7","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":0},"updated":"2018-08-30 08:35:07.000000000","message":"remove this file if there is no changes.","commit_id":"3ca009ecf53090ad785f1482d38d5be26fb60259"}]}
