)]}'
{"nova/pci/utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a52aed748e97d852bb952357149a7c1e2262dbc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    b) Device with vendor_id as 0x10de and product_id as 0x10d8:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    [{\"vendor_id\":\"8086\", \"product_id\":\"8259\"},"},{"line_number":48,"context_line":"     {\"vendor_id\":\"10de\", \"product_id\":\"10d8\"}]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    def _matching_devices(spec):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_c7c10d31","line":48,"updated":"2017-04-05 15:42:48.000000000","message":"Would be useful to add a capabilities_network:\u003clist of features\u003e example to the above.","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d1e57ee6a4d3e04c4fb07e55649f9185b93772b0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    b) Device with vendor_id as 0x10de and product_id as 0x10d8:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    [{\"vendor_id\":\"8086\", \"product_id\":\"8259\"},"},{"line_number":48,"context_line":"     {\"vendor_id\":\"10de\", \"product_id\":\"10d8\"}]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    def _matching_devices(spec):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_16d82851","line":48,"in_reply_to":"bff0334d_c7c10d31","updated":"2017-04-06 08:26:15.000000000","message":"I\u0027ll add this in next PS.","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"be3e30388607b5178f75d9909f1f96f921767989","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _matching_devices(spec):"},{"line_number":52,"context_line":"        for k, v in spec.items():"},{"line_number":53,"context_line":"            pci_dev_v \u003d pci_dev.get(k)"},{"line_number":54,"context_line":"            if isinstance(v, list) and isinstance(pci_dev_v, list):"},{"line_number":55,"context_line":"                if not all(x in pci_dev.get(k) for x in v):"},{"line_number":56,"context_line":"                    return False"},{"line_number":57,"context_line":"            elif pci_dev_v !\u003d v:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_9d2ce2ac","line":54,"range":{"start_line":54,"start_character":61,"end_line":54,"end_character":65},"updated":"2017-04-10 15:01:33.000000000","message":"Is that possible, because we convert the list to a string when we save the object","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15aa4768233c4544800a2c216d77631e56b43a61","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _matching_devices(spec):"},{"line_number":52,"context_line":"        for k, v in spec.items():"},{"line_number":53,"context_line":"            pci_dev_v \u003d pci_dev.get(k)"},{"line_number":54,"context_line":"            if isinstance(v, list) and isinstance(pci_dev_v, list):"},{"line_number":55,"context_line":"                if not all(x in pci_dev.get(k) for x in v):"},{"line_number":56,"context_line":"                    return False"},{"line_number":57,"context_line":"            elif pci_dev_v !\u003d v:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_81c23458","line":54,"range":{"start_line":54,"start_character":61,"end_line":54,"end_character":65},"in_reply_to":"bff0334d_9d2ce2ac","updated":"2017-04-10 19:56:17.000000000","message":"When the information in extra_info is retrieved from the database, we have a dict of strings. In this case:\nextra_info \u003d {\u0027capabilities\u0027: \u003cjson_string\u003e}\n\nThis string is loaded again to an object.\n\nTake a look at the 4th patch of the series. This is still in progress, I realized I need to consider how to manage L95: if the object is a string or a json_string to be loaded.","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9092b725c0e095a78ae73fd0f5db4b15ddd00409","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    [{\"vendor_id\":\"8086\", \"product_id\":\"8259\"},"},{"line_number":48,"context_line":"     {\"vendor_id\":\"10de\", \"product_id\":\"10d8\"}]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    def _matching_devices(spec):"},{"line_number":52,"context_line":"        for k, v in spec.items():"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_6c0bafd5","line":49,"updated":"2017-04-10 16:17:26.000000000","message":"A note that this handles lists (and where we use that) could be helpful","commit_id":"8909910b854ae194d722fbeb1939a987b3800306"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"add156381af757c92e938d981f354a080dcf1c62","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    [{\"vendor_id\":\"8086\", \"product_id\":\"8259\"},"},{"line_number":48,"context_line":"     {\"vendor_id\":\"10de\", \"product_id\":\"10d8\"}]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    def _matching_devices(spec):"},{"line_number":52,"context_line":"        for k, v in spec.items():"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_ef42ea0e","line":49,"in_reply_to":"bff0334d_01ce2481","updated":"2017-04-11 16:14:45.000000000","message":"\"Hay Pipes\". Is that an agricultural me? :P","commit_id":"8909910b854ae194d722fbeb1939a987b3800306"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"03f06fc51160ef92aca15a276afeae5a9a5f5864","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    [{\"vendor_id\":\"8086\", \"product_id\":\"8259\"},"},{"line_number":48,"context_line":"     {\"vendor_id\":\"10de\", \"product_id\":\"10d8\"}]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    def _matching_devices(spec):"},{"line_number":52,"context_line":"        for k, v in spec.items():"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_01ce2481","line":49,"in_reply_to":"bff0334d_6c0bafd5","updated":"2017-04-10 19:56:24.000000000","message":"Done. Also Hay Pipes asked for this.\n\nI\u0027ll add this example.","commit_id":"8909910b854ae194d722fbeb1939a987b3800306"}],"nova/tests/unit/pci/test_utils.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bd4997df41aafb793c173f2a71fc797f51178c80","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(PciDeviceMatchTestCase, self).setUp()"},{"line_number":32,"context_line":"        self.fake_pci_1 \u003d {\u0027vendor_id\u0027: \u0027v1\u0027,"},{"line_number":33,"context_line":"                           \u0027device_id\u0027: \u0027d1\u0027,"},{"line_number":34,"context_line":"                           \u0027capabilities_network\u0027: [\u0027cap1\u0027, \u0027cap2\u0027, \u0027cap3\u0027]}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_single_spec_match(self):"},{"line_number":37,"context_line":"        self.assertTrue(utils.pci_device_prop_match("}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_7d547e21","line":34,"range":{"start_line":34,"start_character":51,"end_line":34,"end_character":75},"updated":"2017-04-10 15:00:57.000000000","message":"Isn\u0027t this a string, due to how the object save works?","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15aa4768233c4544800a2c216d77631e56b43a61","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(PciDeviceMatchTestCase, self).setUp()"},{"line_number":32,"context_line":"        self.fake_pci_1 \u003d {\u0027vendor_id\u0027: \u0027v1\u0027,"},{"line_number":33,"context_line":"                           \u0027device_id\u0027: \u0027d1\u0027,"},{"line_number":34,"context_line":"                           \u0027capabilities_network\u0027: [\u0027cap1\u0027, \u0027cap2\u0027, \u0027cap3\u0027]}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_single_spec_match(self):"},{"line_number":37,"context_line":"        self.assertTrue(utils.pci_device_prop_match("}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_21236858","line":34,"range":{"start_line":34,"start_character":51,"end_line":34,"end_character":75},"in_reply_to":"bff0334d_7d547e21","updated":"2017-04-10 19:56:17.000000000","message":"That\u0027s the point: the information stored in the DB will be loaded (using jsonutils) in an object, once is read from the DB.","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7a52aed748e97d852bb952357149a7c1e2262dbc","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_spec_list_wrong_type(self):"},{"line_number":72,"context_line":"        self.assertFalse(utils.pci_device_prop_match("},{"line_number":73,"context_line":"            self.fake_pci_1, [{\u0027vendor_id\u0027: \u0027v1\u0027, \u0027device_id\u0027: [\u0027d1\u0027]}]))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class PciDeviceAddressParserTestCase(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_e7c41143","line":73,"updated":"2017-04-05 15:42:48.000000000","message":"++ good unit tests of the newly-added matching functionality.","commit_id":"427a0871eb30b93db6be5e9d4361d5ad3d71d028"}]}
