)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c798132c72406fdcd6af18bbd0ec99bb8fe2e6fa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Simple Storage resource support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Simple Storage resource is a storage model used to represent the properties of"},{"line_number":10,"context_line":"a storage controller and it\u0027s directly attached devices. As of this patch,"},{"line_number":11,"context_line":"the Simple Storage emulation is only supported for the libvirt driver for"},{"line_number":12,"context_line":"storage devices that are configured as a Volume via libvirt and attached to a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_2c5784cc","line":9,"updated":"2019-07-02 09:19:24.000000000","message":"just a good practice advice, try to respect the limit of 80 columns also in commit messages","commit_id":"c3fecf85a53b8120e14bc433ad1631ea1f0419d6"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"a30ca966ab1acf17a64fa554a5fd975e0ad5e939","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Simple Storage resource support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Simple Storage resource is a storage model used to represent the properties of"},{"line_number":10,"context_line":"a storage controller and it\u0027s directly attached devices. As of this patch,"},{"line_number":11,"context_line":"the Simple Storage emulation is only supported for the libvirt driver for"},{"line_number":12,"context_line":"storage devices that are configured as a Volume via libvirt and attached to a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_9c11e7b2","line":9,"in_reply_to":"9fb8cfa7_2c5784cc","updated":"2019-07-03 11:05:04.000000000","message":"Done","commit_id":"c3fecf85a53b8120e14bc433ad1631ea1f0419d6"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add Simple Storage resource support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Simple Storage resource is a storage model used to represent the"},{"line_number":10,"context_line":"properties of a storage controller and it\u0027s directly attached"},{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_b2f924c9","line":10,"range":{"start_line":10,"start_character":41,"end_line":10,"end_character":43},"updated":"2019-07-10 13:04:04.000000000","message":"nit: its ?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_324d349a","line":14,"updated":"2019-07-10 13:04:04.000000000","message":"Another thing may be worth mentioning is that with this patch user has to pre-configure storage configuration by hand and it\u0027s static thereafter. May be in the following patches we will make it Redfish-operable to some extent...?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9ce135677ca3788fc011f8c5fb270586b916381","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_174f7434","line":14,"in_reply_to":"7faddb67_0f2f9bf6","updated":"2019-07-16 10:52:46.000000000","message":"Perhaps, so this function is not yet implemented in sushy-tools, right? Then the user needs to prepare their libvirt storage anyhow to make sushy-tools happy.\n\nIf my understanding is correct, I\u0027d add a note somewhere to make it clear to the user.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"5a1ddff20b5f615a15d97a28c17b5ef2fa0e551f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_e2d9b456","line":14,"in_reply_to":"7faddb67_174f7434","updated":"2019-07-16 11:39:01.000000000","message":"I am working on adding some documentation for configuring libvirt pools and volumes as you stated earlier.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"7cbd7bf38c5a9a65e7e7731734672c02d5e1f2ad","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_0f2f9bf6","line":14,"in_reply_to":"7faddb67_324d349a","updated":"2019-07-11 11:19:09.000000000","message":"For making it Redfish-operable, the only function that I see from the Redfish side that achieves this purpose is the createVolume function. I think that will automatically be taken care of when we emulate the Storage subsystem.\nDo you have anything else in mind?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"8541db556fdb59145f7191f144338f55e450cf2a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_369b6f18","line":14,"in_reply_to":"7faddb67_96dd83e1","updated":"2019-07-18 08:42:42.000000000","message":"Actually, I did all of stuff related to attaching a volume to a VM using the virt-manager UI. So I was trying to figure out how to do it using the command line so as to document it.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b45388e2afaac7981bd23fade01f1ac0a602eabb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"devices. As of this patch, the Simple Storage emulation is only"},{"line_number":12,"context_line":"supported for the libvirt driver for storage devices that are"},{"line_number":13,"context_line":"configured as a Volume via libvirt and attached to a VM/domain."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Story: #2005948"},{"line_number":16,"context_line":"Task: #34313"},{"line_number":17,"context_line":"Change-Id: If10bd04d517600c3a69bb43fe0ea50f2efd62422"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_96dd83e1","line":14,"in_reply_to":"7faddb67_e2d9b456","updated":"2019-07-18 08:39:42.000000000","message":"Awesome, but I\u0027d not take that too seriously. At this point just some code blocks ready for cut\u0026paste would be better than nothing!","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"}],"doc/source/user/dynamic-emulator.rst":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    virsh pool-define-as testPool dir - - - - \"/testPool\""},{"line_number":100,"context_line":"    virsh pool-build testPool"},{"line_number":101,"context_line":"    virsh pool-start testPool"},{"line_number":102,"context_line":"    virsh pool-autostart testPool"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_b7d4d248","line":99,"range":{"start_line":99,"start_character":38,"end_line":99,"end_character":45},"updated":"2019-07-25 10:29:38.000000000","message":"Is this sequence of dashes the right thing?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    virsh pool-define-as testPool dir - - - - \"/testPool\""},{"line_number":100,"context_line":"    virsh pool-build testPool"},{"line_number":101,"context_line":"    virsh pool-start testPool"},{"line_number":102,"context_line":"    virsh pool-autostart testPool"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_57cb1ea4","line":99,"range":{"start_line":99,"start_character":56,"end_line":99,"end_character":57},"updated":"2019-07-25 10:29:38.000000000","message":"nit: why quotes?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"8e518b01738d9e046253e35ea3801d2c93d969d8","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    virsh pool-define-as testPool dir - - - - \"/testPool\""},{"line_number":100,"context_line":"    virsh pool-build testPool"},{"line_number":101,"context_line":"    virsh pool-start testPool"},{"line_number":102,"context_line":"    virsh pool-autostart testPool"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_b989ae75","line":99,"range":{"start_line":99,"start_character":38,"end_line":99,"end_character":45},"in_reply_to":"7faddb67_9022bcb8","updated":"2019-08-02 08:36:22.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"6b97fdbcab7377507ef4a87392021354a781290c","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    virsh pool-define-as testPool dir - - - - \"/testPool\""},{"line_number":100,"context_line":"    virsh pool-build testPool"},{"line_number":101,"context_line":"    virsh pool-start testPool"},{"line_number":102,"context_line":"    virsh pool-autostart testPool"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_9022bcb8","line":99,"range":{"start_line":99,"start_character":38,"end_line":99,"end_character":45},"in_reply_to":"7faddb67_b7d4d248","updated":"2019-07-30 15:21:21.000000000","message":"I followed the documentation here(https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh) and cross-checked by executing on my terminal where it seemed to work.","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    virsh vol-create-as testPool testVol 1G"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Next, attach the created volume to the virtual machine/ domain:"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":".. code-block:: bash"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_37c0e27c","line":110,"range":{"start_line":110,"start_character":55,"end_line":110,"end_character":56},"updated":"2019-07-25 10:29:38.000000000","message":"nit: space","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    virsh vol-create-as testPool testVol 1G"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Next, attach the created volume to the virtual machine/ domain:"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":".. code-block:: bash"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_5e1add6e","line":110,"range":{"start_line":110,"start_character":55,"end_line":110,"end_character":56},"in_reply_to":"7faddb67_37c0e27c","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    virsh attach-disk vbmc-node /testPool/testVol sda"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Now, you should be able to query the *Simple Storage* resource collection"},{"line_number":117,"context_line":"for the `vbmc-node` domain in a closely similar format:"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":".. code-block:: bash"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_174a8626","line":116,"range":{"start_line":116,"start_character":9,"end_line":116,"end_character":33},"updated":"2019-07-25 10:29:38.000000000","message":"nit: the query we have below could actually be executed even before all the preparations.","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"0ee202e90b788fff484fbb5fb6d2a2766d072d79","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    virsh attach-disk vbmc-node /testPool/testVol sda"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Now, you should be able to query the *Simple Storage* resource collection"},{"line_number":117,"context_line":"for the `vbmc-node` domain in a closely similar format:"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":".. code-block:: bash"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_3e7b618c","line":116,"range":{"start_line":116,"start_character":9,"end_line":116,"end_character":33},"in_reply_to":"7faddb67_174a8626","updated":"2019-08-02 10:53:09.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"Members\": ["},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                    {"},{"line_number":129,"context_line":"                        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage/ide\""},{"line_number":130,"context_line":"                    },"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_975f56e4","line":129,"range":{"start_line":129,"start_character":82,"end_line":129,"end_character":85},"updated":"2019-07-25 10:29:38.000000000","message":"May be worth explaining why do we have ice and SCSI here? What does this mean with Redfish model?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"Members\": ["},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                    {"},{"line_number":129,"context_line":"                        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage/ide\""},{"line_number":130,"context_line":"                    },"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"                    {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_7e15593c","line":129,"range":{"start_line":129,"start_character":82,"end_line":129,"end_character":85},"in_reply_to":"7faddb67_975f56e4","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage\""},{"line_number":140,"context_line":"    }"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"UEFI boot"},{"line_number":144,"context_line":"~~~~~~~~~"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_376ea296","line":142,"updated":"2019-07-25 10:29:38.000000000","message":"Is there anything else we could do with simple storage over Redfish? Should we show case that if so?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"6b97fdbcab7377507ef4a87392021354a781290c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage\""},{"line_number":140,"context_line":"    }"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"UEFI boot"},{"line_number":144,"context_line":"~~~~~~~~~"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_6b13915d","line":142,"in_reply_to":"7faddb67_376ea296","updated":"2019-07-30 15:21:21.000000000","message":"In the Redfish schema, they haven\u0027t mentioned any actions for the SimpleStorage resource. Do you have anything in mind that I should implement additionally?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"8e518b01738d9e046253e35ea3801d2c93d969d8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage\""},{"line_number":140,"context_line":"    }"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"UEFI boot"},{"line_number":144,"context_line":"~~~~~~~~~"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7faddb67_797fb665","line":142,"in_reply_to":"7faddb67_6b13915d","updated":"2019-08-02 08:36:22.000000000","message":"No, just wanted to check that with you. ;-)","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"831a2a255719817adde4c57a79f3ecc26b819a28","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_ea030abd","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"updated":"2019-08-14 10:13:03.000000000","message":"Just noting that in our Zulip chat we\u0027ve considered an option to automatically create our own storage pool. If you decide to do it that way, may be that could be done in this patch or in a separate patch prior to this one in chain...","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a1a36c928a0af9229a71e9f54abd119409b4b753","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_b04cca3f","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"in_reply_to":"7faddb67_0c28f083","updated":"2019-08-27 18:34:09.000000000","message":"I would highly prefer that we don\u0027t try to create a storage pool unless we\u0027re basically offering up swordfish compatability. Maybe that is the goal, but doing it for the user makes this a little too easy to layer into other things outside of CI/testing use cases.","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ae60d86ee8ff0473fbc374ad5ab247f2efdf5dd5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_27838258","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"in_reply_to":"7faddb67_b04cca3f","updated":"2019-08-30 16:29:30.000000000","message":"The idea is to simplify emulator use by not requiring the user to prepare libvirt for simple storage emulation. The alternative is to document the necessary steps and leave it alone.\n\n@TheJuila in the context of this patch, we are not doing anything Swordfish. \n\nStorage pool mentioned here belongs to libvirt. In this patch we emulate Redfish simple storage based on libvirt volume, which resides within libvirt storage pool.\n\nI may have misread your comment, though...","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"813c353a72005b9fd6c79e24cd438e00a833ca9d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_0c28f083","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"in_reply_to":"7faddb67_d1e593a5","updated":"2019-08-15 06:58:30.000000000","message":"The volume_creation step in the Volumes emulation will also require us to attach the new volume to a domain/VM for usability in Simple Storage because here we are examining the xml desc of the domain and only attaching a volume will make the volume appear in the domain.\n\nNow, there is one problem with attaching a volume automatically, we will also need to supply the target bus value for attaching the volume which can take values like \u0027ide\u0027/\u0027virtio\u0027/\u0027scsi\u0027 that we are using in Simple Storage along with a unique device that has not been previously used by another volume such as \u0027sda/sdb/sdc\u0027 for \u0027scsi\u0027 bus type, \u0027hda/hdb/hdc\u0027 for \u0027ide\u0027 bus type and \u0027vda/vdb/vdc\u0027 for \u0027virtio\u0027 bus type. \n\nSo, while attaching a disk, do I just attach every new volume with a single bus type such as \u0027virtio\u0027 or pick an arbitrary bus type from the above three and attach accordingly?","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ae60d86ee8ff0473fbc374ad5ab247f2efdf5dd5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_077e8669","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"in_reply_to":"7faddb67_d1e593a5","updated":"2019-08-30 16:29:30.000000000","message":"Works for me!","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"caa952c0783fb47017f45dcd706c41580250a7a9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"For emulating the *Simple Storage* resource, some additional preparation is"},{"line_number":93,"context_line":"required on the host side."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"First, you need to create, build and start a libvirt storage pool using virsh:"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. code-block:: bash"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_d1e593a5","line":95,"range":{"start_line":95,"start_character":19,"end_line":95,"end_character":25},"in_reply_to":"7faddb67_ea030abd","updated":"2019-08-15 06:26:23.000000000","message":"I think what I can do is state that the user needs to create a volume via `create_volume` or a regular storage if he wants to see any devices for the Simple Storage and will take care of the create_volume in the Volumes emulation patch.","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"831a2a255719817adde4c57a79f3ecc26b819a28","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \"Name\": \"Simple Storage Collection\","},{"line_number":126,"context_line":"        \"Members@odata.count\": 2,"},{"line_number":127,"context_line":"        \"Members\": ["},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                    {"},{"line_number":130,"context_line":"                        \"@odata.id\": \"/redfish/v1/Systems/vbmc-node/SimpleStorage/ide\""},{"line_number":131,"context_line":"                    },"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_0a30e69d","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":0},"updated":"2019-08-14 10:13:03.000000000","message":"nit: JSON seems not to be prettily-formed.","commit_id":"69cfa3a4f04147d270f47d71e06c930b5c65a367"}],"releasenotes/notes/add-simple-storage-resource-200e78d78c6aa8df.yaml":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a791d0c72a842b6cf086dc7451de27a40ca9e3cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds emulation support Simple Storage resource to the dynamic libvirt"},{"line_number":5,"context_line":"    Redfish emulator. The emulation functionality assumes that the storage"},{"line_number":6,"context_line":"    devices attached to a VM are configured as a libvirt Volume via a storage"},{"line_number":7,"context_line":"    pool. Devices not configured as a Volume will be skipped."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7faddb67_3500be01","line":4,"range":{"start_line":4,"start_character":26,"end_line":4,"end_character":27},"updated":"2019-07-10 13:06:10.000000000","message":"for?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a791d0c72a842b6cf086dc7451de27a40ca9e3cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds emulation support Simple Storage resource to the dynamic libvirt"},{"line_number":5,"context_line":"    Redfish emulator. The emulation functionality assumes that the storage"},{"line_number":6,"context_line":"    devices attached to a VM are configured as a libvirt Volume via a storage"},{"line_number":7,"context_line":"    pool. Devices not configured as a Volume will be skipped."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7faddb67_f509c62b","line":4,"range":{"start_line":4,"start_character":66,"end_line":4,"end_character":73},"updated":"2019-07-10 13:06:10.000000000","message":"to libvirt virtualization backend of the dynamic Redfish emulator","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"a791d0c72a842b6cf086dc7451de27a40ca9e3cc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds emulation support Simple Storage resource to the dynamic libvirt"},{"line_number":5,"context_line":"    Redfish emulator. The emulation functionality assumes that the storage"},{"line_number":6,"context_line":"    devices attached to a VM are configured as a libvirt Volume via a storage"},{"line_number":7,"context_line":"    pool. Devices not configured as a Volume will be skipped."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7faddb67_f2147c50","line":7,"range":{"start_line":7,"start_character":53,"end_line":7,"end_character":60},"updated":"2019-07-10 13:06:10.000000000","message":"will not be considered for emulation purposes","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"}],"sushy_tools/emulator/main.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            resources.systems.get_simple_storage_collection(identity))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        return flask.render_template("},{"line_number":327,"context_line":"            \u0027simple_storage_collection.json\u0027, identity\u003didentity,"},{"line_number":328,"context_line":"            simple_storage_controllers\u003dsimple_storage_controllers)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d284e0b3","line":327,"range":{"start_line":327,"start_character":55,"end_line":327,"end_character":63},"updated":"2019-07-10 13:04:04.000000000","message":"Careful with UUIDs! They should be unique, if we don\u0027t respect that our clients can mess up their caches, maps etc.\n\nHere you seem to be re-using the UUID of the system resource for storage collection? If this holds, may be we should better have them statically configured or automatically generated in a way that they are stable e.g. only changing with their parent resource changes.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9ce135677ca3788fc011f8c5fb270586b916381","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            resources.systems.get_simple_storage_collection(identity))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        return flask.render_template("},{"line_number":327,"context_line":"            \u0027simple_storage_collection.json\u0027, identity\u003didentity,"},{"line_number":328,"context_line":"            simple_storage_controllers\u003dsimple_storage_controllers)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_77da684b","line":327,"range":{"start_line":327,"start_character":55,"end_line":327,"end_character":63},"in_reply_to":"7faddb67_8f686b21","updated":"2019-07-16 10:52:46.000000000","message":"Ah, right! Sorry for false alarm!","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"7cbd7bf38c5a9a65e7e7731734672c02d5e1f2ad","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            resources.systems.get_simple_storage_collection(identity))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        return flask.render_template("},{"line_number":327,"context_line":"            \u0027simple_storage_collection.json\u0027, identity\u003didentity,"},{"line_number":328,"context_line":"            simple_storage_controllers\u003dsimple_storage_controllers)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_8f686b21","line":327,"range":{"start_line":327,"start_character":55,"end_line":327,"end_character":63},"in_reply_to":"7faddb67_d284e0b3","updated":"2019-07-11 11:19:09.000000000","message":"Isn\u0027t it supposed to be the identity of the System Resource when we are trying to fetch the collection of Simple Storage objects that it has? \nI tried to use it just as the System id is used to query the  set of EthernetInterfaces it supports in a function above in the file.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource could not be found\u0027)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            return flask.render_template(\u0027simple_storage.json\u0027,"},{"line_number":345,"context_line":"                                         identity\u003didentity,"},{"line_number":346,"context_line":"                                         simple_storage\u003dsimple_storage_dict)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return \u0027Not found\u0027, 404"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_7293acfb","line":345,"range":{"start_line":345,"start_character":50,"end_line":345,"end_character":58},"updated":"2019-07-10 13:04:04.000000000","message":"Ditto.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9ce135677ca3788fc011f8c5fb270586b916381","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource could not be found\u0027)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            return flask.render_template(\u0027simple_storage.json\u0027,"},{"line_number":345,"context_line":"                                         identity\u003didentity,"},{"line_number":346,"context_line":"                                         simple_storage\u003dsimple_storage_dict)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return \u0027Not found\u0027, 404"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_37e870e0","line":345,"range":{"start_line":345,"start_character":50,"end_line":345,"end_character":58},"in_reply_to":"7faddb67_7293acfb","updated":"2019-07-16 10:52:46.000000000","message":"Done","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                                         identity\u003didentity,"},{"line_number":346,"context_line":"                                         simple_storage\u003dsimple_storage_dict)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"def parse_args():"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_32d45420","line":348,"updated":"2019-07-10 13:04:04.000000000","message":"nit: may be move this up to #342?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if simple_storage_id not in simple_storage_controllers:"},{"line_number":459,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource was not found\u0027)"},{"line_number":460,"context_line":"            return \u0027Not found\u0027, 404"},{"line_number":461,"context_line":"        simple_storage_dict \u003d simple_storage_controllers[simple_storage_id]"},{"line_number":462,"context_line":"        return flask.render_template(\u0027simple_storage.json\u0027, identity\u003didentity,"},{"line_number":463,"context_line":"                                     simple_storage\u003dsimple_storage_dict)"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_972d1648","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":27},"updated":"2019-07-25 10:29:38.000000000","message":"nit: I have a feeling that embedding type annotation into variable name is not very Pythonic either. Better put semantics into name than type.","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    with Resources() as resources:"},{"line_number":456,"context_line":"        simple_storage_controllers \u003d ("},{"line_number":457,"context_line":"            resources.systems.get_simple_storage_collection(identity))"},{"line_number":458,"context_line":"        if simple_storage_id not in simple_storage_controllers:"},{"line_number":459,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource was not found\u0027)"},{"line_number":460,"context_line":"            return \u0027Not found\u0027, 404"},{"line_number":461,"context_line":"        simple_storage_dict \u003d simple_storage_controllers[simple_storage_id]"},{"line_number":462,"context_line":"        return flask.render_template(\u0027simple_storage.json\u0027, identity\u003didentity,"},{"line_number":463,"context_line":"                                     simple_storage\u003dsimple_storage_dict)"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_17f846c2","line":461,"range":{"start_line":458,"start_character":8,"end_line":461,"end_character":75},"updated":"2019-07-25 10:29:38.000000000","message":"nit: it is said that try/except KeyError would be more Pythonic","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    with Resources() as resources:"},{"line_number":456,"context_line":"        simple_storage_controllers \u003d ("},{"line_number":457,"context_line":"            resources.systems.get_simple_storage_collection(identity))"},{"line_number":458,"context_line":"        if simple_storage_id not in simple_storage_controllers:"},{"line_number":459,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource was not found\u0027)"},{"line_number":460,"context_line":"            return \u0027Not found\u0027, 404"},{"line_number":461,"context_line":"        simple_storage_dict \u003d simple_storage_controllers[simple_storage_id]"},{"line_number":462,"context_line":"        return flask.render_template(\u0027simple_storage.json\u0027, identity\u003didentity,"},{"line_number":463,"context_line":"                                     simple_storage\u003dsimple_storage_dict)"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_be0f512c","line":461,"range":{"start_line":458,"start_character":8,"end_line":461,"end_character":75},"in_reply_to":"7faddb67_17f846c2","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if simple_storage_id not in simple_storage_controllers:"},{"line_number":459,"context_line":"            app.logger.debug(\u0027\"%s\" Simple Storage resource was not found\u0027)"},{"line_number":460,"context_line":"            return \u0027Not found\u0027, 404"},{"line_number":461,"context_line":"        simple_storage_dict \u003d simple_storage_controllers[simple_storage_id]"},{"line_number":462,"context_line":"        return flask.render_template(\u0027simple_storage.json\u0027, identity\u003didentity,"},{"line_number":463,"context_line":"                                     simple_storage\u003dsimple_storage_dict)"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_fe09492a","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":27},"in_reply_to":"7faddb67_972d1648","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"}],"sushy_tools/emulator/resources/systems/libvirtdriver.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c798132c72406fdcd6af18bbd0ec99bb8fe2e6fa","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        tree \u003d ET.fromstring(domain.XMLDesc())"},{"line_number":616,"context_line":"        simple_storage \u003d {}"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        for disk_element in tree.findall(\".//disk/target[@bus]/..\"):"},{"line_number":619,"context_line":"            source_element \u003d disk_element.find(\u0027source\u0027)"},{"line_number":620,"context_line":"            if source_element is not None:"},{"line_number":621,"context_line":"                disk_type \u003d disk_element.attrib[\u0027type\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_2f7bf67a","line":618,"updated":"2019-07-02 09:19:24.000000000","message":"this block is huge and kind of hard to read, I see there\u0027s some code repetition inside, maybe it\u0027s worth to find a way to split it and reduce it to improve readability ?","commit_id":"c3fecf85a53b8120e14bc433ad1631ea1f0419d6"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"a30ca966ab1acf17a64fa554a5fd975e0ad5e939","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        tree \u003d ET.fromstring(domain.XMLDesc())"},{"line_number":616,"context_line":"        simple_storage \u003d {}"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        for disk_element in tree.findall(\".//disk/target[@bus]/..\"):"},{"line_number":619,"context_line":"            source_element \u003d disk_element.find(\u0027source\u0027)"},{"line_number":620,"context_line":"            if source_element is not None:"},{"line_number":621,"context_line":"                disk_type \u003d disk_element.attrib[\u0027type\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1c25f70a","line":618,"in_reply_to":"9fb8cfa7_2f7bf67a","updated":"2019-07-03 11:05:04.000000000","message":"I have tried to split the function and avoid repetition of code. Please have a look. Thanks :)","commit_id":"c3fecf85a53b8120e14bc433ad1631ea1f0419d6"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                \".//devices/interface[@type\u003d\u0027network\u0027]/mac\")]"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _find_device_by_path(self, vol_path):"},{"line_number":604,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b2fa8472","line":604,"range":{"start_line":604,"start_character":17,"end_line":604,"end_character":27},"updated":"2019-07-10 13:04:04.000000000","message":"Data type is officially declared in the docstring. Thus it is not so important to have it here as well.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                \".//devices/interface[@type\u003d\u0027network\u0027]/mac\")]"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _find_device_by_path(self, vol_path):"},{"line_number":604,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b2d124fe","line":604,"range":{"start_line":604,"start_character":35,"end_line":604,"end_character":41},"updated":"2019-07-10 13:04:04.000000000","message":"typo","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_9273c84d","line":607,"updated":"2019-07-10 13:04:04.000000000","message":"Pardon my nitpickiness, but let\u0027s trim the empty lines like everywhere in this repo?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                       \u0027%(err)s\u0027 %"},{"line_number":617,"context_line":"                       {\u0027path\u0027: vol_path, \u0027uri\u0027: self._uri,"},{"line_number":618,"context_line":"                        \u0027err\u0027: e})"},{"line_number":619,"context_line":"                logger.debug(msg)"},{"line_number":620,"context_line":"            else:"},{"line_number":621,"context_line":"                disk_device \u003d {}"},{"line_number":622,"context_line":"                disk_device[\u0027Name\u0027] \u003d vol.name()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_12b6f8da","line":619,"updated":"2019-07-10 13:04:04.000000000","message":"Let\u0027s return here right away?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":617,"context_line":"                       {\u0027path\u0027: vol_path, \u0027uri\u0027: self._uri,"},{"line_number":618,"context_line":"                        \u0027err\u0027: e})"},{"line_number":619,"context_line":"                logger.debug(msg)"},{"line_number":620,"context_line":"            else:"},{"line_number":621,"context_line":"                disk_device \u003d {}"},{"line_number":622,"context_line":"                disk_device[\u0027Name\u0027] \u003d vol.name()"},{"line_number":623,"context_line":"                disk_device[\u0027CapacityBytes\u0027] \u003d vol.info()[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_72c64c4b","line":620,"updated":"2019-07-10 13:04:04.000000000","message":"Then we could ditch \u0027else\u0027 \\o/","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                logger.debug(msg)"},{"line_number":620,"context_line":"            else:"},{"line_number":621,"context_line":"                disk_device \u003d {}"},{"line_number":622,"context_line":"                disk_device[\u0027Name\u0027] \u003d vol.name()"},{"line_number":623,"context_line":"                disk_device[\u0027CapacityBytes\u0027] \u003d vol.info()[1]"},{"line_number":624,"context_line":"                return disk_device"},{"line_number":625,"context_line":"            return None"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f2b23ce6","line":623,"range":{"start_line":622,"start_character":16,"end_line":623,"end_character":60},"updated":"2019-07-10 13:04:04.000000000","message":"It\u0027s more traditional to do it like this:\n\n  disk_device \u003d {\n    \u0027Name\u0027: vol.name(),\n    ...\n  }","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                disk_device[\u0027Name\u0027] \u003d vol.name()"},{"line_number":623,"context_line":"                disk_device[\u0027CapacityBytes\u0027] \u003d vol.info()[1]"},{"line_number":624,"context_line":"                return disk_device"},{"line_number":625,"context_line":"            return None"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def _find_device_from_pool(self, pool_name, vol_name):"},{"line_number":628,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d29e2053","line":625,"updated":"2019-07-10 13:04:04.000000000","message":"None is implicit, no need to put it here","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                return disk_device"},{"line_number":625,"context_line":"            return None"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def _find_device_from_pool(self, pool_name, vol_name):"},{"line_number":628,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        :param pool_name: libvirt pool name"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f20ebc8b","line":627,"range":{"start_line":627,"start_character":8,"end_line":627,"end_character":30},"updated":"2019-07-10 13:04:04.000000000","message":"It\u0027s tempting to merge this method with the upper one because there seems to be so much in common... But may be it\u0027s not good from readability standpoint. Just a thought.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            return None"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def _find_device_from_pool(self, pool_name, vol_name):"},{"line_number":628,"context_line":"        \"\"\"Get a dictionary of the of the device attributes"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        :param pool_name: libvirt pool name"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_92d668f1","line":628,"range":{"start_line":628,"start_character":35,"end_line":628,"end_character":41},"updated":"2019-07-10 13:04:04.000000000","message":"typo","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":640,"context_line":"                msg \u003d (\u0027Error finding Storage Pool by name \"%(name)s\" at\u0027"},{"line_number":641,"context_line":"                       \u0027libvirt URI \"%(uri)s\": %(err)s\u0027 %"},{"line_number":642,"context_line":"                       {\u0027name\u0027: pool_name, \u0027uri\u0027: self._uri, \u0027err\u0027: e})"},{"line_number":643,"context_line":"                logger.debug(msg)"},{"line_number":644,"context_line":"            else:"},{"line_number":645,"context_line":"                try:"},{"line_number":646,"context_line":"                    vol \u003d pool.storageVolLookupByName(vol_name)"},{"line_number":647,"context_line":"                except libvirt.libvirtError as e:"},{"line_number":648,"context_line":"                    msg \u003d (\u0027Error finding Storage Volume by name \"%(name)s\" \u0027"},{"line_number":649,"context_line":"                           \u0027in Pool \u0027\"%(pName)s\"\u0027 at libvirt URI \"%(uri)s\"\u0027"},{"line_number":650,"context_line":"                           \u0027: %(err)s\u0027 %"},{"line_number":651,"context_line":"                           {\u0027name\u0027: vol_name, \u0027pName\u0027: pool_name,"},{"line_number":652,"context_line":"                            \u0027uri\u0027: self._uri, \u0027err\u0027: e})"},{"line_number":653,"context_line":"                    logger.debug(msg)"},{"line_number":654,"context_line":"                else:"},{"line_number":655,"context_line":"                    disk_device \u003d {}"},{"line_number":656,"context_line":"                    disk_device[\u0027Name\u0027] \u003d vol.name()"},{"line_number":657,"context_line":"                    disk_device[\u0027CapacityBytes\u0027] \u003d vol.info()[1]"},{"line_number":658,"context_line":"                    return disk_device"},{"line_number":659,"context_line":"            return None"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def get_simple_storage_collection(self, identity):"},{"line_number":662,"context_line":"        \"\"\"Get a dict of simple storage controllers and their devices"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_322c5401","line":659,"range":{"start_line":643,"start_character":1,"end_line":659,"end_character":23},"updated":"2019-07-10 13:04:04.000000000","message":"Ditto","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            if source_element is not None:"},{"line_number":679,"context_line":"                disk_type \u003d disk_element.attrib[\u0027type\u0027]"},{"line_number":680,"context_line":"                ctl_type \u003d disk_element.find(\u0027target\u0027).attrib[\u0027bus\u0027]"},{"line_number":681,"context_line":"                if disk_type \u003d\u003d \u0027file\u0027 or disk_type \u003d\u003d \u0027block\u0027:"},{"line_number":682,"context_line":"                    if disk_type \u003d\u003d \u0027file\u0027:"},{"line_number":683,"context_line":"                        vol_path \u003d source_element.attrib[\u0027file\u0027]"},{"line_number":684,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_921d08bf","line":681,"range":{"start_line":681,"start_character":0,"end_line":681,"end_character":63},"updated":"2019-07-10 13:04:04.000000000","message":"nit: if disk_type in (\u0027file\u0027, \u0027block\u0027)","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                    vol_name \u003d source_element.attrib[\u0027volume\u0027]"},{"line_number":690,"context_line":"                    disk_device \u003d self._find_device_from_pool(pool_name,"},{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {}"},{"line_number":695,"context_line":"                        simple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d2686022","line":692,"range":{"start_line":692,"start_character":19,"end_line":692,"end_character":30},"updated":"2019-07-10 13:04:04.000000000","message":"Can this variable be undefined?","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                    disk_device \u003d self._find_device_from_pool(pool_name,"},{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {}"},{"line_number":695,"context_line":"                        simple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type"},{"line_number":696,"context_line":"                        simple_storage[ctl_type][\u0027Name\u0027] \u003d ctl_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5266b053","line":693,"range":{"start_line":693,"start_character":20,"end_line":693,"end_character":54},"updated":"2019-07-10 13:04:04.000000000","message":"Consider using `collections.defaultdict` to simplify this.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c188db17abcca197d5a30541e8425f462f55441","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                        simple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type"},{"line_number":696,"context_line":"                        simple_storage[ctl_type][\u0027Name\u0027] \u003d ctl_type"},{"line_number":697,"context_line":"                        simple_storage[ctl_type][\u0027DeviceList\u0027] \u003d []"},{"line_number":698,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":699,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_92e0a898","line":698,"range":{"start_line":698,"start_character":66,"end_line":698,"end_character":77},"updated":"2019-07-10 13:04:04.000000000","message":"Is it possible to have duplicate `disk_device` names coming from different `disk_type`? May be not, just asking!","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9ce135677ca3788fc011f8c5fb270586b916381","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                        simple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type"},{"line_number":696,"context_line":"                        simple_storage[ctl_type][\u0027Name\u0027] \u003d ctl_type"},{"line_number":697,"context_line":"                        simple_storage[ctl_type][\u0027DeviceList\u0027] \u003d []"},{"line_number":698,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":699,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_57cf2c55","line":698,"range":{"start_line":698,"start_character":66,"end_line":698,"end_character":77},"in_reply_to":"7faddb67_8fff0b33","updated":"2019-07-16 10:52:46.000000000","message":"Perhaps we are safe here then.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"7cbd7bf38c5a9a65e7e7731734672c02d5e1f2ad","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                        simple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type"},{"line_number":696,"context_line":"                        simple_storage[ctl_type][\u0027Name\u0027] \u003d ctl_type"},{"line_number":697,"context_line":"                        simple_storage[ctl_type][\u0027DeviceList\u0027] \u003d []"},{"line_number":698,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":699,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_8fff0b33","line":698,"range":{"start_line":698,"start_character":66,"end_line":698,"end_character":77},"in_reply_to":"7faddb67_92e0a898","updated":"2019-07-11 11:19:09.000000000","message":"The volume names are unique in the scope of a pool in libvirt. Correspondingly, within each SimpleStorage instance, the disk_device name will be unique but the uniqueness is not guaranteed across the various SimpleStorage instances.","commit_id":"e9fdeecc30b66a76246c66dd04a73ddb90759143"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"94eb059aa4bb907cc61ddada6374f34897cf4f96","unresolved":false,"context_lines":[{"line_number":604,"context_line":"    def _find_device_by_path(self, vol_path):"},{"line_number":605,"context_line":"        \"\"\"Get device attributes using path"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":608,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_8e6bc61d","line":607,"range":{"start_line":607,"start_character":15,"end_line":607,"end_character":24},"updated":"2019-07-24 23:19:09.000000000","message":"vol_path ?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":604,"context_line":"    def _find_device_by_path(self, vol_path):"},{"line_number":605,"context_line":"        \"\"\"Get device attributes using path"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":608,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_74157b48","line":607,"range":{"start_line":607,"start_character":15,"end_line":607,"end_character":24},"in_reply_to":"7faddb67_8e6bc61d","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\"Get device attributes using path"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":608,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"},{"line_number":611,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_b7d5b21d","line":608,"range":{"start_line":608,"start_character":20,"end_line":608,"end_character":24},"updated":"2019-07-25 10:29:38.000000000","message":"or None","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\"Get device attributes using path"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        :param pool_name: path for the libvirt volume"},{"line_number":608,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":609,"context_line":"        \"\"\""},{"line_number":610,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"},{"line_number":611,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_140e873a","line":608,"range":{"start_line":608,"start_character":20,"end_line":608,"end_character":24},"in_reply_to":"7faddb67_b7d5b21d","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        :param pool_name: libvirt pool name"},{"line_number":631,"context_line":"        :param vol_name: libvirt volume name"},{"line_number":632,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":633,"context_line":"        \"\"\""},{"line_number":634,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"},{"line_number":635,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_77df3a3a","line":632,"range":{"start_line":632,"start_character":20,"end_line":632,"end_character":24},"updated":"2019-07-25 10:29:38.000000000","message":"or None","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        :param pool_name: libvirt pool name"},{"line_number":631,"context_line":"        :param vol_name: libvirt volume name"},{"line_number":632,"context_line":"        :returns: a dict of the corresponding device attributes"},{"line_number":633,"context_line":"        \"\"\""},{"line_number":634,"context_line":"        with libvirt_open(self._uri, readonly\u003dTrue) as conn:"},{"line_number":635,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_340b832a","line":632,"range":{"start_line":632,"start_character":20,"end_line":632,"end_character":24},"in_reply_to":"7faddb67_77df3a3a","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                msg \u003d (\u0027Error finding Storage Volume by name \"%(name)s\" \u0027"},{"line_number":648,"context_line":"                       \u0027in Pool \u0027\"%(pName)s\"\u0027 at libvirt URI \"%(uri)s\"\u0027"},{"line_number":649,"context_line":"                       \u0027: %(err)s\u0027 %"},{"line_number":650,"context_line":"                       {\u0027name\u0027: vol_name, \u0027pName\u0027: pool_name,"},{"line_number":651,"context_line":"                        \u0027uri\u0027: self._uri, \u0027err\u0027: e})"},{"line_number":652,"context_line":"                logger.debug(msg)"},{"line_number":653,"context_line":"                return"},{"line_number":654,"context_line":"            disk_device \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_f7ea4ad6","line":651,"range":{"start_line":650,"start_character":23,"end_line":651,"end_character":51},"updated":"2019-07-25 10:29:38.000000000","message":"we should eventually migrate to f-strings!","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"8e518b01738d9e046253e35ea3801d2c93d969d8","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                msg \u003d (\u0027Error finding Storage Volume by name \"%(name)s\" \u0027"},{"line_number":648,"context_line":"                       \u0027in Pool \u0027\"%(pName)s\"\u0027 at libvirt URI \"%(uri)s\"\u0027"},{"line_number":649,"context_line":"                       \u0027: %(err)s\u0027 %"},{"line_number":650,"context_line":"                       {\u0027name\u0027: vol_name, \u0027pName\u0027: pool_name,"},{"line_number":651,"context_line":"                        \u0027uri\u0027: self._uri, \u0027err\u0027: e})"},{"line_number":652,"context_line":"                logger.debug(msg)"},{"line_number":653,"context_line":"                return"},{"line_number":654,"context_line":"            disk_device \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_3967feeb","line":651,"range":{"start_line":650,"start_character":23,"end_line":651,"end_character":51},"in_reply_to":"7faddb67_73414739","updated":"2019-08-02 08:36:22.000000000","message":"Definitely not in this patch!\n\nAlso, I think we can\u0027t realistically migrate to f-strings any time soon for as long as we support Python \u003c 3.4 (AFAIK). Unless we resort to third-party modules.","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"2977ef531f8652f5c77831d91283e33c7e464fad","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                msg \u003d (\u0027Error finding Storage Volume by name \"%(name)s\" \u0027"},{"line_number":648,"context_line":"                       \u0027in Pool \u0027\"%(pName)s\"\u0027 at libvirt URI \"%(uri)s\"\u0027"},{"line_number":649,"context_line":"                       \u0027: %(err)s\u0027 %"},{"line_number":650,"context_line":"                       {\u0027name\u0027: vol_name, \u0027pName\u0027: pool_name,"},{"line_number":651,"context_line":"                        \u0027uri\u0027: self._uri, \u0027err\u0027: e})"},{"line_number":652,"context_line":"                logger.debug(msg)"},{"line_number":653,"context_line":"                return"},{"line_number":654,"context_line":"            disk_device \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_73414739","line":651,"range":{"start_line":650,"start_character":23,"end_line":651,"end_character":51},"in_reply_to":"7faddb67_f7ea4ad6","updated":"2019-07-30 17:49:22.000000000","message":"Should I add this in a separate patch where I change it everywhere else too in the repository?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"94eb059aa4bb907cc61ddada6374f34897cf4f96","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        Others are skipped."},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"        :param identity: libvirt domain or ID"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        :returns: dict of simple storage controller dict with their attributes"},{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        domain \u003d self._get_domain(identity, readonly\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_ee5fda6f","line":668,"updated":"2019-07-24 23:19:09.000000000","message":"nit: remove blank line","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        Others are skipped."},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"        :param identity: libvirt domain or ID"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        :returns: dict of simple storage controller dict with their attributes"},{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        domain \u003d self._get_domain(identity, readonly\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_f4008b04","line":668,"in_reply_to":"7faddb67_ee5fda6f","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3ab40ecb46bcdd18a317c8441609bb24ee9bfe77","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_b7913249","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"updated":"2019-07-25 10:29:38.000000000","message":"Ah, `defaultdicit` is not actually used!","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"8e518b01738d9e046253e35ea3801d2c93d969d8","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_f9b16645","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_4a2005ad","updated":"2019-08-02 08:36:22.000000000","message":"So the argument to `defaultdict` is a callable which should return a new value. May be you can have a (lambda) function there producing a new copy of the sub-dict (which can also be a `defaultdict`)?\n\nThe code you pasted here might have a problem of sharing `DeviceList` object among all `ctl_type` dicts...","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"41c04bb8718d8a00de0d089cfc0e70c583eea7cc","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_949b57c7","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_5405df0e","updated":"2019-08-02 09:44:34.000000000","message":"Oh! I didn\u0027t know one could set the default value for a specific key. Something new to learn everyday :D\n\nThis looks really neat. I\u0027ll go with this :)","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7b711f28604d12bef857a49b51c9ada13ca26e07","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_5405df0e","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_79a01643","updated":"2019-08-02 09:35:35.000000000","message":"That\u0027s happening later. What I mean is something along these lines:\n\nsimple_storage \u003d defaultdict(lambda: defaultdict(DeviceList\u003dlist()))\n\nsimple_storage[ctl_type][\u0027Id\u0027] \u003d ctl_type\nsimple_storage[ctl_type][\u0027Name\u0027] \u003d ctl_type\nsimple_storage[ctl_type][DeviceList].append(..)\n\nBut it\u0027s for you to decide what\u0027s better!","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"1a762d1a0136b407a7fd05afe4a030da4b453808","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_1e01c505","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_b7913249","updated":"2019-08-02 10:48:53.000000000","message":"Done","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"7d629a1a744e114806fc02f9f98dcd5974531857","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_4a2005ad","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_b7913249","updated":"2019-07-31 03:55:09.000000000","message":"I was looking up how to use defaultdict in our case where we need to pass the key to every new key-value pair created for simple_storage dict. However, I did not seem to find a good way to pass the key for usage to the defaultdict factory.\n\nI have come up with a somewhat similar implementation for simple_storage \u003d {}:\nd \u003d {\n       \u0027Id\u0027: ctl_type,\n       \u0027Name\u0027: ctl_type,\n       \u0027DeviceList\u0027: []\n     }\nsimple_ctl \u003d simple_storage.setdefault(ctl_type, d)\nsimple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)\n\nDo you have anything else in mind?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"adc661e38a89597043e5c6432146f9bb2f5e83a2","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                                                              vol_name)"},{"line_number":692,"context_line":"                if disk_device is not None:"},{"line_number":693,"context_line":"                    if ctl_type not in simple_storage:"},{"line_number":694,"context_line":"                        simple_storage[ctl_type] \u003d {"},{"line_number":695,"context_line":"                            \u0027Id\u0027: ctl_type,"},{"line_number":696,"context_line":"                            \u0027Name\u0027: ctl_type,"},{"line_number":697,"context_line":"                            \u0027DeviceList\u0027: []"},{"line_number":698,"context_line":"                        }"},{"line_number":699,"context_line":"                    simple_storage[ctl_type][\u0027DeviceList\u0027].append(disk_device)"},{"line_number":700,"context_line":"        return simple_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_79a01643","line":698,"range":{"start_line":694,"start_character":51,"end_line":698,"end_character":25},"in_reply_to":"7faddb67_f9b16645","updated":"2019-08-02 09:25:17.000000000","message":"The callable of `defaultdict` does not take any parameter. The default value `d` (in the comment above) for each simple_storage key-value pair has to take a parameter `ctl_type`. How can lambda be of help here?","commit_id":"9f766c6226ab080adc54db942145980011e3fe60"}],"sushy_tools/tests/unit/emulator/test_main.py":[{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"0fb9a9b41851d425e454b5fae9bd85418c605a4d","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        self.assertEqual(\u0027Simple Storage Collection\u0027,"},{"line_number":441,"context_line":"                         response.json[\u0027Name\u0027])"},{"line_number":442,"context_line":"        self.assertEqual(2, response.json[\u0027Members@odata.count\u0027])"},{"line_number":443,"context_line":"        self.assertEqual([\u0027/redfish/v1/Systems/\u0027 + self.uuid +"},{"line_number":444,"context_line":"                          \u0027/SimpleStorage/virtio\u0027,"},{"line_number":445,"context_line":"                          \u0027/redfish/v1/Systems/\u0027 + self.uuid +"},{"line_number":446,"context_line":"                          \u0027/SimpleStorage/ide\u0027],"},{"line_number":447,"context_line":"                         [m[\u0027@odata.id\u0027] for m in response.json[\u0027Members\u0027]])"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def test_simple_storage_collection_empty(self, resources_mock):"},{"line_number":450,"context_line":"        resources_mock \u003d resources_mock.return_value.__enter__.return_value"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ff0c6e3c","line":447,"range":{"start_line":443,"start_character":7,"end_line":447,"end_character":76},"updated":"2019-07-24 16:23:31.000000000","message":"I think this test fails intermittently as it insists on the order of the elements in the list, while the order in the response may vary. So, if the order does not matter (which I cannot judge), I suggest to simply check for each element if it is in the list.","commit_id":"bc62c183c8577252b4d2a737b531d18523a5da12"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"c458b8e24e998f03966fd9fee307a3e989a93b7f","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        self.assertEqual(\u0027Simple Storage Collection\u0027,"},{"line_number":441,"context_line":"                         response.json[\u0027Name\u0027])"},{"line_number":442,"context_line":"        self.assertEqual(2, response.json[\u0027Members@odata.count\u0027])"},{"line_number":443,"context_line":"        self.assertEqual([\u0027/redfish/v1/Systems/\u0027 + self.uuid +"},{"line_number":444,"context_line":"                          \u0027/SimpleStorage/virtio\u0027,"},{"line_number":445,"context_line":"                          \u0027/redfish/v1/Systems/\u0027 + self.uuid +"},{"line_number":446,"context_line":"                          \u0027/SimpleStorage/ide\u0027],"},{"line_number":447,"context_line":"                         [m[\u0027@odata.id\u0027] for m in response.json[\u0027Members\u0027]])"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def test_simple_storage_collection_empty(self, resources_mock):"},{"line_number":450,"context_line":"        resources_mock \u003d resources_mock.return_value.__enter__.return_value"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ff2b0e2d","line":447,"range":{"start_line":443,"start_character":7,"end_line":447,"end_character":76},"in_reply_to":"7faddb67_ff0c6e3c","updated":"2019-07-24 16:39:13.000000000","message":"Decided to go with using sets since the order was unimportant. Thank you so much for helping out :)","commit_id":"bc62c183c8577252b4d2a737b531d18523a5da12"}]}
