)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":48,"context_line":"expose API for BIOS settings management."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Test structure depends and is based on other patches to be merged:"},{"line_number":51,"context_line":"568636 and 566727."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Private method _process_bios_attributes is introduced to make"},{"line_number":54,"context_line":"XML testable otherwise have to compare XML strings to test if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f7c97a3_e1009f37","line":51,"range":{"start_line":51,"start_character":0,"end_line":51,"end_character":18},"updated":"2018-07-21 06:04:22.000000000","message":"Better refer by Change-Id","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"expose API for BIOS settings management."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Test structure depends and is based on other patches to be merged:"},{"line_number":51,"context_line":"568636 and 566727."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Private method _process_bios_attributes is introduced to make"},{"line_number":54,"context_line":"XML testable otherwise have to compare XML strings to test if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f7c97a3_61e8d414","line":51,"range":{"start_line":51,"start_character":0,"end_line":51,"end_character":18},"in_reply_to":"5f7c97a3_e1009f37","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}],"sushy_tools/emulator/drivers/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @abc.abstractmethod"},{"line_number":124,"context_line":"    def get_bios(self, identity):"},{"line_number":125,"context_line":"        \"\"\"Get BIOS for the system"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :returns: key-value pairs of BIOS attributes"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_259b0c64","line":125,"updated":"2018-07-20 16:50:51.000000000","message":"nit: \"Get BIOS attributes\"","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @abc.abstractmethod"},{"line_number":124,"context_line":"    def get_bios(self, identity):"},{"line_number":125,"context_line":"        \"\"\"Get BIOS for the system"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :returns: key-value pairs of BIOS attributes"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_4d3f34df","line":125,"in_reply_to":"5f7c97a3_259b0c64","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}],"sushy_tools/emulator/drivers/libvirtdriver.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"58eaf2ca8a8dff2f87f41f7e52225eead545c372","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        It supports adding default BIOS attributes,"},{"line_number":340,"context_line":"        retrieving existing BIOS attributes and"},{"line_number":341,"context_line":"        updating existing BIOS attributes."},{"line_number":342,"context_line":"        :param domain_xml: Libvirt domain XML to process"},{"line_number":343,"context_line":"        :param bios_attributes: BIOS attributes for updates or default"},{"line_number":344,"context_line":"            values if not specified"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_c18f682d","line":341,"updated":"2018-07-12 16:54:45.000000000","message":"Nit: it might be good to add a line break between 341 and 342 for readability.","commit_id":"e4c6f7db8ae57e11deba9990262219125c72eb6e"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"cc152b648f6853c15dffcf8264b766283deb6e00","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        It supports adding default BIOS attributes,"},{"line_number":340,"context_line":"        retrieving existing BIOS attributes and"},{"line_number":341,"context_line":"        updating existing BIOS attributes."},{"line_number":342,"context_line":"        :param domain_xml: Libvirt domain XML to process"},{"line_number":343,"context_line":"        :param bios_attributes: BIOS attributes for updates or default"},{"line_number":344,"context_line":"            values if not specified"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_42dd3adc","line":341,"in_reply_to":"5f7c97a3_c18f682d","updated":"2018-07-17 15:25:28.000000000","message":"Done","commit_id":"e4c6f7db8ae57e11deba9990262219125c72eb6e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                 update\u003dFalse):"},{"line_number":337,"context_line":"        \"\"\"Process Libvirt domain XML for BIOS attributes"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        It supports adding default BIOS attributes,"},{"line_number":340,"context_line":"        retrieving existing BIOS attributes and"},{"line_number":341,"context_line":"        updating existing BIOS attributes."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_343a5c96","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":10},"updated":"2018-07-20 22:32:41.000000000","message":"nit: This method...","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                 update\u003dFalse):"},{"line_number":337,"context_line":"        \"\"\"Process Libvirt domain XML for BIOS attributes"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        It supports adding default BIOS attributes,"},{"line_number":340,"context_line":"        retrieving existing BIOS attributes and"},{"line_number":341,"context_line":"        updating existing BIOS attributes."},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_481ba26e","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":10},"in_reply_to":"5f7c97a3_343a5c96","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param domain_xml: Libvirt domain XML to process"},{"line_number":344,"context_line":"        :param bios_attributes: BIOS attributes for updates or default"},{"line_number":345,"context_line":"            values if not specified"},{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_615faf74","line":346,"range":{"start_line":346,"start_character":30,"end_line":346,"end_character":38},"updated":"2018-07-21 06:04:22.000000000","message":"It seems that the code also updates XML tree if the `bios` branch is missing there regardless of the flag.","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param domain_xml: Libvirt domain XML to process"},{"line_number":344,"context_line":"        :param bios_attributes: BIOS attributes for updates or default"},{"line_number":345,"context_line":"            values if not specified"},{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_cd0c7f3c","line":346,"range":{"start_line":346,"start_character":30,"end_line":346,"end_character":38},"in_reply_to":"5f7c97a3_615faf74","updated":"2018-07-24 15:16:37.000000000","message":"yes, it is is intended, see comment below","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            values if not specified"},{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_745d34ea","line":348,"range":{"start_line":348,"start_character":18,"end_line":348,"end_character":23},"updated":"2018-07-20 22:32:41.000000000","message":"nit: may be `tuple` to refer to the data type and possibly for intersphinx to link it up","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            values if not specified"},{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d08e5832","line":348,"range":{"start_line":348,"start_character":18,"end_line":348,"end_character":23},"in_reply_to":"5f7c97a3_745d34ea","updated":"2018-07-24 15:16:37.000000000","message":"updated to namedtuple as this was changed","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        namespace \u003d \u0027http://openstack.org/xmlns/libvirt/sushy\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_057b7028","line":349,"updated":"2018-07-20 16:50:51.000000000","message":"nit: \"made to\"","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        namespace \u003d \u0027http://openstack.org/xmlns/libvirt/sushy\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_886f7ac6","line":349,"in_reply_to":"5f7c97a3_057b7028","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        namespace \u003d \u0027http://openstack.org/xmlns/libvirt/sushy\u0027"},{"line_number":353,"context_line":"        ET.register_namespace(\u0027sushy\u0027, namespace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_2576ac40","line":350,"updated":"2018-07-20 16:50:51.000000000","message":"I\u0027d prefer you defined a namedtuple to use here","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        namespace \u003d \u0027http://openstack.org/xmlns/libvirt/sushy\u0027"},{"line_number":353,"context_line":"        ET.register_namespace(\u0027sushy\u0027, namespace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_742bf431","line":350,"in_reply_to":"5f7c97a3_2576ac40","updated":"2018-07-20 22:32:41.000000000","message":"Python\u0027s `namedtuple` type looks a bit weird to me due to its metaprogramming nature (e.g. it generates source code and evals it on the fly iirc).\n\nThat probably explains why it is not exceptionally fast.\n\nJust my 2c. ;)","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        :returns: Tuple of processed XML element tree,"},{"line_number":349,"context_line":"            if changes were madeto XML,"},{"line_number":350,"context_line":"            BIOS attributes"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        namespace \u003d \u0027http://openstack.org/xmlns/libvirt/sushy\u0027"},{"line_number":353,"context_line":"        ET.register_namespace(\u0027sushy\u0027, namespace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f0183420","line":350,"in_reply_to":"5f7c97a3_742bf431","updated":"2018-07-24 15:16:37.000000000","message":"this was hard to decide, but one tuple wouldn\u0027t slow down too much for better readability? See how it reads with named tuple","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        if bios is not None and update:"},{"line_number":365,"context_line":"            metadata.remove(bios)"},{"line_number":366,"context_line":"            bios \u003d None"},{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_4b5652cf","line":367,"range":{"start_line":367,"start_character":8,"end_line":367,"end_character":24},"updated":"2018-07-20 22:32:41.000000000","message":"Is correct that the actual update happens even if `update` flag is `False` (and `sushy:bios` element is not present)?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        if bios is not None and update:"},{"line_number":365,"context_line":"            metadata.remove(bios)"},{"line_number":366,"context_line":"            bios \u003d None"},{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0708187e","line":367,"range":{"start_line":367,"start_character":8,"end_line":367,"end_character":24},"in_reply_to":"5f7c97a3_4b5652cf","updated":"2018-07-24 15:16:37.000000000","message":"yes, this would be the case where default values are written when the XML is accessed for the first time. \u0027update\u0027 flag means \u0027update existing attributes\u0027 and not smth like \u0027update xml\u0027 - when default values are written xml is updated too. I have updated the variable name to \u0027update_existing_attributes\u0027 to make this clearer","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            metadata.remove(bios)"},{"line_number":366,"context_line":"            bios \u003d None"},{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e19f3f4e","line":368,"range":{"start_line":368,"start_character":66,"end_line":368,"end_character":68},"updated":"2018-07-21 06:04:22.000000000","message":"nit: tuple is not required","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            metadata.remove(bios)"},{"line_number":366,"context_line":"            bios \u003d None"},{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_2a9e3906","line":368,"range":{"start_line":368,"start_character":66,"end_line":368,"end_character":68},"in_reply_to":"5f7c97a3_e19f3f4e","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"},{"line_number":372,"context_line":"                              \u0027sushy:attribute\u0027,"},{"line_number":373,"context_line":"                              name\u003dkey,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_812bebe7","line":370,"range":{"start_line":370,"start_character":46,"end_line":370,"end_character":51},"updated":"2018-07-21 06:04:22.000000000","message":"does it make sense to sort the elements to ensure stable XML?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        if bios is None:"},{"line_number":368,"context_line":"            bios \u003d ET.SubElement(metadata, \u0027{%s}bios\u0027 % (namespace,))"},{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"},{"line_number":372,"context_line":"                              \u0027sushy:attribute\u0027,"},{"line_number":373,"context_line":"                              name\u003dkey,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_6dfe8b05","line":370,"range":{"start_line":370,"start_character":46,"end_line":370,"end_character":51},"in_reply_to":"5f7c97a3_812bebe7","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"},{"line_number":372,"context_line":"                              \u0027sushy:attribute\u0027,"},{"line_number":373,"context_line":"                              name\u003dkey,"},{"line_number":374,"context_line":"                              value\u003dvalue)"},{"line_number":375,"context_line":"            attributes_written \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_21f9b780","line":372,"range":{"start_line":372,"start_character":31,"end_line":372,"end_character":46},"updated":"2018-07-21 06:04:22.000000000","message":"is it alright that namespace clarification here is done like `sushy:` while for `attributes` it\u0027s done like `{namespace}`?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            attributes \u003d ET.SubElement(bios, \u0027{%s}attributes\u0027 % (namespace,))"},{"line_number":370,"context_line":"            for key, value in bios_attributes.items():"},{"line_number":371,"context_line":"                ET.SubElement(attributes,"},{"line_number":372,"context_line":"                              \u0027sushy:attribute\u0027,"},{"line_number":373,"context_line":"                              name\u003dkey,"},{"line_number":374,"context_line":"                              value\u003dvalue)"},{"line_number":375,"context_line":"            attributes_written \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_6a83d156","line":372,"range":{"start_line":372,"start_character":31,"end_line":372,"end_character":46},"in_reply_to":"5f7c97a3_21f9b780","updated":"2018-07-24 15:16:37.000000000","message":"the upper does not work with `sushy:` syntax, I don\u0027t know why - probably because it cannot find the element to return afterwards which is not necessary for \u0027attribute\u0027 elements.\nUpdated to use the \u0027namespace\u0027 syntax here for consistency, though it is longer.","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        attributes \u003d tree.find(\u0027.//sushy:attributes\u0027, ns)"},{"line_number":377,"context_line":"        bios_attributes \u003d {}"},{"line_number":378,"context_line":"        for attribute in attributes:"},{"line_number":379,"context_line":"            bios_attributes[attribute.attrib[\u0027name\u0027]] \u003d\\"},{"line_number":380,"context_line":"                attribute.attrib[\u0027value\u0027]"},{"line_number":381,"context_line":"        return tree, attributes_written, bios_attributes"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_cb6102a4","line":379,"range":{"start_line":379,"start_character":55,"end_line":379,"end_character":56},"updated":"2018-07-20 22:32:41.000000000","message":"alternatively, parenthesis could be used like \nx \u003d (\n y\n)","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        attributes \u003d tree.find(\u0027.//sushy:attributes\u0027, ns)"},{"line_number":377,"context_line":"        bios_attributes \u003d {}"},{"line_number":378,"context_line":"        for attribute in attributes:"},{"line_number":379,"context_line":"            bios_attributes[attribute.attrib[\u0027name\u0027]] \u003d\\"},{"line_number":380,"context_line":"                attribute.attrib[\u0027value\u0027]"},{"line_number":381,"context_line":"        return tree, attributes_written, bios_attributes"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_c5701844","line":379,"updated":"2018-07-20 16:50:51.000000000","message":"nit: space before \\","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        attributes \u003d tree.find(\u0027.//sushy:attributes\u0027, ns)"},{"line_number":377,"context_line":"        bios_attributes \u003d {}"},{"line_number":378,"context_line":"        for attribute in attributes:"},{"line_number":379,"context_line":"            bios_attributes[attribute.attrib[\u0027name\u0027]] \u003d\\"},{"line_number":380,"context_line":"                attribute.attrib[\u0027value\u0027]"},{"line_number":381,"context_line":"        return tree, attributes_written, bios_attributes"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_cad465bf","line":379,"range":{"start_line":379,"start_character":55,"end_line":379,"end_character":56},"in_reply_to":"5f7c97a3_cb6102a4","updated":"2018-07-24 15:16:37.000000000","message":"NA as updated to list comprehension","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b263b60859d14770e9dc8a9d190700c50861bbe7","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            attributes_written \u003d True"},{"line_number":376,"context_line":"        attributes \u003d tree.find(\u0027.//sushy:attributes\u0027, ns)"},{"line_number":377,"context_line":"        bios_attributes \u003d {}"},{"line_number":378,"context_line":"        for attribute in attributes:"},{"line_number":379,"context_line":"            bios_attributes[attribute.attrib[\u0027name\u0027]] \u003d\\"},{"line_number":380,"context_line":"                attribute.attrib[\u0027value\u0027]"},{"line_number":381,"context_line":"        return tree, attributes_written, bios_attributes"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def _process_bios(self, identity,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0b437a12","line":380,"range":{"start_line":378,"start_character":8,"end_line":380,"end_character":41},"updated":"2018-07-20 22:32:41.000000000","message":"this piece would probably look more concise if it was a dict comprehension","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            attributes_written \u003d True"},{"line_number":376,"context_line":"        attributes \u003d tree.find(\u0027.//sushy:attributes\u0027, ns)"},{"line_number":377,"context_line":"        bios_attributes \u003d {}"},{"line_number":378,"context_line":"        for attribute in attributes:"},{"line_number":379,"context_line":"            bios_attributes[attribute.attrib[\u0027name\u0027]] \u003d\\"},{"line_number":380,"context_line":"                attribute.attrib[\u0027value\u0027]"},{"line_number":381,"context_line":"        return tree, attributes_written, bios_attributes"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def _process_bios(self, identity,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_8ade6dd9","line":380,"range":{"start_line":378,"start_character":8,"end_line":380,"end_character":41},"in_reply_to":"5f7c97a3_0b437a12","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            they are missing or update necessary"},{"line_number":391,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        :returns: New or existing BIOS attributes"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        :raises: `FishyError` if BIOS attributes cannot be saved"},{"line_number":396,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_21553752","line":393,"range":{"start_line":393,"start_character":39,"end_line":393,"end_character":49},"updated":"2018-07-21 06:04:22.000000000","message":"may be mention data type?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            they are missing or update necessary"},{"line_number":391,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        :returns: New or existing BIOS attributes"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        :raises: `FishyError` if BIOS attributes cannot be saved"},{"line_number":396,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_4a8ff5d2","line":393,"range":{"start_line":393,"start_character":39,"end_line":393,"end_character":49},"in_reply_to":"5f7c97a3_21553752","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\""},{"line_number":397,"context_line":"        with libvirt_open(self._uri) as conn:"},{"line_number":398,"context_line":"            libvirt_domain \u003d conn.lookupByName(identity)"},{"line_number":399,"context_line":"            tree, needs_update, bios_attributes \u003d\\"},{"line_number":400,"context_line":"                self._process_bios_attributes(libvirt_domain.XMLDesc(),"},{"line_number":401,"context_line":"                                              bios_attributes,"},{"line_number":402,"context_line":"                                              update)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e56bd450","line":399,"updated":"2018-07-20 16:50:51.000000000","message":"yeah, a namedtuple would be more readable","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\""},{"line_number":397,"context_line":"        with libvirt_open(self._uri) as conn:"},{"line_number":398,"context_line":"            libvirt_domain \u003d conn.lookupByName(identity)"},{"line_number":399,"context_line":"            tree, needs_update, bios_attributes \u003d\\"},{"line_number":400,"context_line":"                self._process_bios_attributes(libvirt_domain.XMLDesc(),"},{"line_number":401,"context_line":"                                              bios_attributes,"},{"line_number":402,"context_line":"                                              update)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f0c6f469","line":399,"in_reply_to":"5f7c97a3_e56bd450","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if needs_update:"},{"line_number":405,"context_line":"                try:"},{"line_number":406,"context_line":"                    conn.defineXML(ET.tostring(tree).decode(\u0027utf-8\u0027))"},{"line_number":407,"context_line":"                except libvirt.libvirtError as e:"},{"line_number":408,"context_line":"                    msg \u003d (\u0027Error updating BIOS attributes\u0027"},{"line_number":409,"context_line":"                           \u0027 at libvirt URI \"%(uri)s\": \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_21077772","line":406,"range":{"start_line":406,"start_character":60,"end_line":406,"end_character":67},"updated":"2018-07-21 06:04:22.000000000","message":"default encoding seems to be `encoding\u003d\"us-ascii\"`, is it correct that we decode it as `utf-8`?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if needs_update:"},{"line_number":405,"context_line":"                try:"},{"line_number":406,"context_line":"                    conn.defineXML(ET.tostring(tree).decode(\u0027utf-8\u0027))"},{"line_number":407,"context_line":"                except libvirt.libvirtError as e:"},{"line_number":408,"context_line":"                    msg \u003d (\u0027Error updating BIOS attributes\u0027"},{"line_number":409,"context_line":"                           \u0027 at libvirt URI \"%(uri)s\": \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e1697f25","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":59},"updated":"2018-07-21 06:04:22.000000000","message":"do we need to deserialize the XML string from bytes into unicode?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if needs_update:"},{"line_number":405,"context_line":"                try:"},{"line_number":406,"context_line":"                    conn.defineXML(ET.tostring(tree).decode(\u0027utf-8\u0027))"},{"line_number":407,"context_line":"                except libvirt.libvirtError as e:"},{"line_number":408,"context_line":"                    msg \u003d (\u0027Error updating BIOS attributes\u0027"},{"line_number":409,"context_line":"                           \u0027 at libvirt URI \"%(uri)s\": \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0d78377c","line":406,"range":{"start_line":406,"start_character":60,"end_line":406,"end_character":67},"in_reply_to":"5f7c97a3_21077772","updated":"2018-07-24 15:16:37.000000000","message":"this is how it is used elsewhere in the class (see above, e.g., ln220), I will leave this for another patch to decide","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if needs_update:"},{"line_number":405,"context_line":"                try:"},{"line_number":406,"context_line":"                    conn.defineXML(ET.tostring(tree).decode(\u0027utf-8\u0027))"},{"line_number":407,"context_line":"                except libvirt.libvirtError as e:"},{"line_number":408,"context_line":"                    msg \u003d (\u0027Error updating BIOS attributes\u0027"},{"line_number":409,"context_line":"                           \u0027 at libvirt URI \"%(uri)s\": \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_2d7df36c","line":406,"range":{"start_line":406,"start_character":53,"end_line":406,"end_character":59},"in_reply_to":"5f7c97a3_e1697f25","updated":"2018-07-24 15:16:37.000000000","message":"ditto","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        If there are no BIOS attributes, domain is updated with default values."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":420,"context_line":"        :returns: key-value pairs of BIOS attributes"},{"line_number":421,"context_line":"        \"\"\""},{"line_number":422,"context_line":"        return self._process_bios(identity)"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e152df67","line":420,"range":{"start_line":420,"start_character":18,"end_line":420,"end_character":33},"updated":"2018-07-21 06:04:22.000000000","message":"here and elsewhere: may be more explicit that it\u0027s a dict?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        If there are no BIOS attributes, domain is updated with default values."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":420,"context_line":"        :returns: key-value pairs of BIOS attributes"},{"line_number":421,"context_line":"        \"\"\""},{"line_number":422,"context_line":"        return self._process_bios(identity)"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d00c183c","line":420,"range":{"start_line":420,"start_character":18,"end_line":420,"end_character":33},"in_reply_to":"5f7c97a3_e152df67","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        bios_attributes \u003d self.get_bios(identity)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        for key, value in attributes.items():"},{"line_number":434,"context_line":"            bios_attributes[key] \u003d value"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        self._process_bios(identity, bios_attributes, True)"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_858c602e","line":434,"updated":"2018-07-20 16:50:51.000000000","message":"nit: bios_attributes.update(attributes)","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        bios_attributes \u003d self.get_bios(identity)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        for key, value in attributes.items():"},{"line_number":434,"context_line":"            bios_attributes[key] \u003d value"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        self._process_bios(identity, bios_attributes, True)"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9016a04a","line":434,"in_reply_to":"5f7c97a3_858c602e","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":442,"context_line":"        \"\"\""},{"line_number":443,"context_line":"        self._process_bios(identity, self.DEFAULT_BIOS_ATTRIBUTES, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_81620b3c","line":443,"range":{"start_line":443,"start_character":67,"end_line":443,"end_character":71},"updated":"2018-07-21 06:04:22.000000000","message":"nit: `update\u003dTrue` would be more readable to me","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":442,"context_line":"        \"\"\""},{"line_number":443,"context_line":"        self._process_bios(identity, self.DEFAULT_BIOS_ATTRIBUTES, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_507008a8","line":443,"range":{"start_line":443,"start_character":67,"end_line":443,"end_character":71},"in_reply_to":"5f7c97a3_81620b3c","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b8c52c6fd3030c405bade4506b6d55314f37d92c","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                           for atr in tree.find(\u0027.//sushy:attributes\u0027, ns)}"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        BiosProcessResult \u003d namedtuple(\u0027BiosProcessResult\u0027,"},{"line_number":400,"context_line":"                                       \u0027tree, attributes_written,\u0027"},{"line_number":401,"context_line":"                                       \u0027bios_attributes\u0027)"},{"line_number":402,"context_line":"        return BiosProcessResult(tree, attributes_written, bios_attributes)"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_98342ce1","line":400,"updated":"2018-07-27 17:51:37.000000000","message":"better use a list [\u0027tree\u0027, \u0027attributes_written\u0027, \u0027bios_attributes\u0027]","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"bcd0b2bfa0aed5bca3d8c6c7bd49f0fd26473b6f","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                           for atr in tree.find(\u0027.//sushy:attributes\u0027, ns)}"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        BiosProcessResult \u003d namedtuple(\u0027BiosProcessResult\u0027,"},{"line_number":400,"context_line":"                                       \u0027tree, attributes_written,\u0027"},{"line_number":401,"context_line":"                                       \u0027bios_attributes\u0027)"},{"line_number":402,"context_line":"        return BiosProcessResult(tree, attributes_written, bios_attributes)"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_b85a311c","line":400,"in_reply_to":"5f7c97a3_98342ce1","updated":"2018-07-30 08:10:32.000000000","message":"Done","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b8c52c6fd3030c405bade4506b6d55314f37d92c","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        BiosProcessResult \u003d namedtuple(\u0027BiosProcessResult\u0027,"},{"line_number":400,"context_line":"                                       \u0027tree, attributes_written,\u0027"},{"line_number":401,"context_line":"                                       \u0027bios_attributes\u0027)"},{"line_number":402,"context_line":"        return BiosProcessResult(tree, attributes_written, bios_attributes)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def _process_bios(self, identity,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_382dd88f","line":401,"updated":"2018-07-27 17:51:37.000000000","message":"Creating namedtuple classes is expensive, this should be created on the module level.","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"bcd0b2bfa0aed5bca3d8c6c7bd49f0fd26473b6f","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        BiosProcessResult \u003d namedtuple(\u0027BiosProcessResult\u0027,"},{"line_number":400,"context_line":"                                       \u0027tree, attributes_written,\u0027"},{"line_number":401,"context_line":"                                       \u0027bios_attributes\u0027)"},{"line_number":402,"context_line":"        return BiosProcessResult(tree, attributes_written, bios_attributes)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def _process_bios(self, identity,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_f83bc9c5","line":401,"in_reply_to":"5f7c97a3_382dd88f","updated":"2018-07-30 08:10:32.000000000","message":"Done","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b8c52c6fd3030c405bade4506b6d55314f37d92c","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":410,"context_line":"        :param bios_attributes: Full list of BIOS attributes to use if"},{"line_number":411,"context_line":"            they are missing or update necessary"},{"line_number":412,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        :returns: New or existing dict of BIOS attributes"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_582a1478","line":412,"updated":"2018-07-27 17:51:37.000000000","message":"the param is called update_existing_attributes","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"bcd0b2bfa0aed5bca3d8c6c7bd49f0fd26473b6f","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        :param identity: libvirt domain name or ID"},{"line_number":410,"context_line":"        :param bios_attributes: Full list of BIOS attributes to use if"},{"line_number":411,"context_line":"            they are missing or update necessary"},{"line_number":412,"context_line":"        :param update: Update existing BIOS attributes"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        :returns: New or existing dict of BIOS attributes"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_384e216d","line":412,"in_reply_to":"5f7c97a3_582a1478","updated":"2018-07-30 08:10:32.000000000","message":"Done","commit_id":"acd170e61ea8c1122a17e1d91030db0bcd8de52c"}],"sushy_tools/emulator/main.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"50801ee3d4ceaeefe1fb43dc3da3a3103a10b127","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    return flask.render_template("},{"line_number":193,"context_line":"        \u0027bios.json\u0027,"},{"line_number":194,"context_line":"        identity\u003didentity,"},{"line_number":195,"context_line":"        bios_current_attributes\u003djson.dumps(bios))"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"@app.route(\u0027/redfish/v1/Systems/\u003cidentity\u003e/BIOS/Settings\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_61ed6f8c","line":195,"range":{"start_line":195,"start_character":37,"end_line":195,"end_character":42},"updated":"2018-07-21 06:04:22.000000000","message":"may be `indent\u003d2` for readability and `sort\u003d`True` for stability?","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    return flask.render_template("},{"line_number":193,"context_line":"        \u0027bios.json\u0027,"},{"line_number":194,"context_line":"        identity\u003didentity,"},{"line_number":195,"context_line":"        bios_current_attributes\u003djson.dumps(bios))"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"@app.route(\u0027/redfish/v1/Systems/\u003cidentity\u003e/BIOS/Settings\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_7b16454d","line":195,"range":{"start_line":195,"start_character":37,"end_line":195,"end_character":42},"in_reply_to":"5f7c97a3_61ed6f8c","updated":"2018-07-24 15:16:37.000000000","message":"done,  but had to use indent\u003d6 as it started to count from the edge not parent","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}],"sushy_tools/emulator/templates/bios.json":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    },"},{"line_number":13,"context_line":"    \"Actions\": {"},{"line_number":14,"context_line":"        \"#Bios.ResetBios\": {"},{"line_number":15,"context_line":"            \"target\": \"/redfish/v1/Systems/{{ identity }}/BIOS/Actions/Bios.ResetBios\""},{"line_number":16,"context_line":"        },"},{"line_number":17,"context_line":"        \"#Bios.ChangePassword\": {"},{"line_number":18,"context_line":"            \"target\": \"/redfish/v1/Systems/{{ identity }}/BIOS/Actions/Bios.ChangePassword\""}],"source_content_type":"application/json","patch_set":4,"id":"5f7c97a3_05a05090","line":15,"updated":"2018-07-20 16:50:51.000000000","message":"I wonder if we should implement this eventually","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    },"},{"line_number":13,"context_line":"    \"Actions\": {"},{"line_number":14,"context_line":"        \"#Bios.ResetBios\": {"},{"line_number":15,"context_line":"            \"target\": \"/redfish/v1/Systems/{{ identity }}/BIOS/Actions/Bios.ResetBios\""},{"line_number":16,"context_line":"        },"},{"line_number":17,"context_line":"        \"#Bios.ChangePassword\": {"},{"line_number":18,"context_line":"            \"target\": \"/redfish/v1/Systems/{{ identity }}/BIOS/Actions/Bios.ChangePassword\""}],"source_content_type":"application/json","patch_set":4,"id":"5f7c97a3_3b70cda7","line":15,"in_reply_to":"5f7c97a3_05a05090","updated":"2018-07-24 15:16:37.000000000","message":"can you clarify as I don\u0027t know to which part this points - implement which part? ResetBios is implemented, but ChangePassword not yet (so maybe rather remove ChangePassword Action from template for now)","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}],"sushy_tools/tests/unit/emulator/test_libvirt.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        domain_mock \u003d conn_mock.lookupByName.return_value"},{"line_number":202,"context_line":"        domain_mock.XMLDesc.return_value \u003d domain_xml"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        test_driver \u003d LibvirtDriver()"},{"line_number":205,"context_line":"        bios_attributes \u003d test_driver.get_bios(\u0027xxx-yyy-zzz\u0027)"},{"line_number":206,"context_line":"        self.assertEqual(LibvirtDriver.DEFAULT_BIOS_ATTRIBUTES,"},{"line_number":207,"context_line":"                         bios_attributes)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_4592c84b","line":204,"updated":"2018-07-20 16:50:51.000000000","message":"nit: we should move this to setUp probably","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        domain_mock \u003d conn_mock.lookupByName.return_value"},{"line_number":202,"context_line":"        domain_mock.XMLDesc.return_value \u003d domain_xml"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        test_driver \u003d LibvirtDriver()"},{"line_number":205,"context_line":"        bios_attributes \u003d test_driver.get_bios(\u0027xxx-yyy-zzz\u0027)"},{"line_number":206,"context_line":"        self.assertEqual(LibvirtDriver.DEFAULT_BIOS_ATTRIBUTES,"},{"line_number":207,"context_line":"                         bios_attributes)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_fbab356e","line":204,"in_reply_to":"5f7c97a3_4592c84b","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        domain_mock \u003d conn_mock.lookupByName.return_value"},{"line_number":325,"context_line":"        domain_mock.XMLDesc.return_value \u003d domain_xml"},{"line_number":326,"context_line":"        conn_mock.defineXML.side_effect \u003d libvirt.libvirtError("},{"line_number":327,"context_line":"            \u0027because I can\u0027)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        test_driver \u003d LibvirtDriver()"},{"line_number":330,"context_line":"        self.assertRaises(FishyError,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_65958430","line":327,"updated":"2018-07-20 16:50:51.000000000","message":"lol","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        domain_mock \u003d conn_mock.lookupByName.return_value"},{"line_number":325,"context_line":"        domain_mock.XMLDesc.return_value \u003d domain_xml"},{"line_number":326,"context_line":"        conn_mock.defineXML.side_effect \u003d libvirt.libvirtError("},{"line_number":327,"context_line":"            \u0027because I can\u0027)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        test_driver \u003d LibvirtDriver()"},{"line_number":330,"context_line":"        self.assertRaises(FishyError,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_3bd76df7","line":327,"in_reply_to":"5f7c97a3_65958430","updated":"2018-07-24 15:16:37.000000000","message":"not my invention, copied from Aleksandra\u0027s patch :)","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}],"sushy_tools/tests/unit/emulator/test_main.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"58eaf2ca8a8dff2f87f41f7e52225eead545c372","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a16fcc5e","line":1,"updated":"2018-07-12 16:54:45.000000000","message":"This seems like it is not needed?","commit_id":"e4c6f7db8ae57e11deba9990262219125c72eb6e"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"cc152b648f6853c15dffcf8264b766283deb6e00","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_62f3966e","line":1,"in_reply_to":"5f7c97a3_a16fcc5e","updated":"2018-07-17 15:25:28.000000000","message":"removed, this was caused by copy-paste from another file. Will do a separate clean up for other files in the project that have this.","commit_id":"e4c6f7db8ae57e11deba9990262219125c72eb6e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a332fe7d00fef7333dd59ef3429eccc7c5150045","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        super(EmulatorTestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch(\u0027sushy_tools.emulator.main.driver\u0027, autospec\u003dTrue)"},{"line_number":30,"context_line":"    def test_bios(self, driver_mock):"},{"line_number":31,"context_line":"        driver_mock.get_bios.return_value \u003d {\"attribute 1\": \"value 1\","},{"line_number":32,"context_line":"                                             \"attribute 2\": \"value 2\"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_a58f1c20","line":29,"updated":"2018-07-20 16:50:51.000000000","message":"nit: you can move this decorator to the class since it\u0027s used in every method","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"},{"author":{"_account_id":27909,"name":"Aija Jauntēva","email":"code@clusums.eu","username":"ajya"},"change_message_id":"1bacc504adc96b30307e2972ea4d41547db68a7a","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        super(EmulatorTestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch(\u0027sushy_tools.emulator.main.driver\u0027, autospec\u003dTrue)"},{"line_number":30,"context_line":"    def test_bios(self, driver_mock):"},{"line_number":31,"context_line":"        driver_mock.get_bios.return_value \u003d {\"attribute 1\": \"value 1\","},{"line_number":32,"context_line":"                                             \"attribute 2\": \"value 2\"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_7b8c05d8","line":29,"in_reply_to":"5f7c97a3_a58f1c20","updated":"2018-07-24 15:16:37.000000000","message":"Done","commit_id":"772f18a2c297646b0d14f86eabf19847ba60e5d0"}]}
