)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add local_gb discovery to sushy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds the disk size discovery in all the"},{"line_number":10,"context_line":"scenarios. It gets the largest volume size if volume"},{"line_number":11,"context_line":"is configured, else get the largest disk size."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I82da7166a1f9024c71c9bc5349bd1ba430058923"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1f1a1f67_ee6bde81","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":10},"updated":"2017-07-19 14:24:32.000000000","message":"It would be really useful to have a link that points us to this information.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add local_gb discovery to sushy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds the disk size discovery in all the"},{"line_number":10,"context_line":"scenarios. It gets the largest volume size if volume"},{"line_number":11,"context_line":"is configured, else get the largest disk size."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I82da7166a1f9024c71c9bc5349bd1ba430058923"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1f1a1f67_c2c0f3e3","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":10},"in_reply_to":"1f1a1f67_ee6bde81","updated":"2017-07-19 16:16:23.000000000","message":"i dont think i can provide the link here. Though i can explain what I mean by all scenarios.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"57b46c3a77c05ac08337d863f1d14086af789533","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This commit adds the disk size discovery in all the"},{"line_number":10,"context_line":"scenarios. It gets the largest volume size if volume"},{"line_number":11,"context_line":"is configured, else get the largest disk size."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I82da7166a1f9024c71c9bc5349bd1ba430058923"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1f1a1f67_517f1365","line":12,"updated":"2017-07-19 14:30:45.000000000","message":"Also, is there an RFE or something that tells us what this work is part of?","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This commit adds the disk size discovery in all the"},{"line_number":10,"context_line":"scenarios. It gets the largest volume size if volume"},{"line_number":11,"context_line":"is configured, else get the largest disk size."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I82da7166a1f9024c71c9bc5349bd1ba430058923"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1f1a1f67_e2f64f5d","line":12,"in_reply_to":"1f1a1f67_517f1365","updated":"2017-07-19 16:16:23.000000000","message":"Yes. Its part RedfishInspect Interface for Ironic. RFE https://bugs.launchpad.net/ironic/+bug/1668487","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"}],"sushy/resources/system/drives.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    block_size_bytes \u003d None"},{"line_number":40,"context_line":"    \"\"\"The size of the smallest addressible unit of this drive in bytes\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    capable_speed_Gbs \u003d None"},{"line_number":43,"context_line":"    \"\"\"The speed which this drive can communicate to a storage controller"},{"line_number":44,"context_line":"    in ideal conditions in Gigabits per second\"\"\""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_8e82f9c7","line":42,"updated":"2017-04-24 06:39:02.000000000","message":"s/Gbs/gbs/ (all lower-case)","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \"\"\"The rotation speed of this Drive in Revolutions per Minute (RPM).\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    volumes \u003d None"},{"line_number":60,"context_line":"    \"\"\"A reference to the Volumes associated with this drive.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, connector, identity, redfish_version\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"A class representing a Drives"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_6e87add9","line":60,"updated":"2017-04-24 06:39:02.000000000","message":"are these HTTP links? If so, let\u0027s hide them until we can provide real Python objects wrapping them.\n\nUPD: oh, we have real Volume objects in this patch. Will this collection return them?","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":18781,"name":"vinay muddu","email":"vinay50muddu@yahoo.com","username":"vmud213"},"change_message_id":"b7836eb4b35e7cd9c75ff33124b03e21d18f650e","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Drives(base.ResourceBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    identity \u003d None"},{"line_number":25,"context_line":"    \"\"\"The processor identity string\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    name \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_655fbb41","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":19},"updated":"2017-06-21 08:21:58.000000000","message":"These are supposed to be Fields. See the latest changes in system resource.","commit_id":"ff6a5c9fccc8487b400760cf6c1fe9029db7245d"},{"author":{"_account_id":18781,"name":"vinay muddu","email":"vinay50muddu@yahoo.com","username":"vmud213"},"change_message_id":"b7836eb4b35e7cd9c75ff33124b03e21d18f650e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    identity \u003d None"},{"line_number":25,"context_line":"    \"\"\"The processor identity string\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    name \u003d None"},{"line_number":28,"context_line":"    \"\"\"The name of the resource or array element\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    description \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_e02739b6","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":15},"updated":"2017-06-21 08:21:58.000000000","message":"ditto and make the changes to all the class attributes.","commit_id":"ff6a5c9fccc8487b400760cf6c1fe9029db7245d"},{"author":{"_account_id":18781,"name":"vinay muddu","email":"vinay50muddu@yahoo.com","username":"vmud213"},"change_message_id":"b7836eb4b35e7cd9c75ff33124b03e21d18f650e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        super(Drives, self).__init__(connector, identity,"},{"line_number":71,"context_line":"                                     redfish_version)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _parse_attributes(self):"},{"line_number":74,"context_line":"        self.identity \u003d self.json.get(\u0027Id\u0027)"},{"line_number":75,"context_line":"        self.name \u003d self.json.get(\u0027Name\u0027)"},{"line_number":76,"context_line":"        self.description \u003d self.json.get(\u0027Description\u0027)"},{"line_number":77,"context_line":"        status \u003d self.json.get(\u0027Status\u0027)"},{"line_number":78,"context_line":"        if status is not None:"},{"line_number":79,"context_line":"            self.state \u003d status.get(\u0027State\u0027)"},{"line_number":80,"context_line":"            self.health \u003d status.get(\u0027Health\u0027)"},{"line_number":81,"context_line":"        self.block_size_bytes \u003d self.json.get(\u0027BlockSizeBytes\u0027)"},{"line_number":82,"context_line":"        self.capable_speed_Gbs \u003d self.json.get(\u0027CapableSpeedGbs\u0027)"},{"line_number":83,"context_line":"        self.capacitybytes \u003d self.json.get(\u0027CapacityBytes\u0027)"},{"line_number":84,"context_line":"        self.mediatype \u003d self.json.get(\u0027MediaType\u0027)"},{"line_number":85,"context_line":"        self.protocol \u003d self.json.get(\u0027Protocol\u0027)"},{"line_number":86,"context_line":"        self.rotation_speed_rpm \u003d self.json.get(\u0027RotationSpeedRPM\u0027)"},{"line_number":87,"context_line":"        links \u003d self.json.get(\u0027Links\u0027)"},{"line_number":88,"context_line":"        if links is not None:"},{"line_number":89,"context_line":"            self.volumes \u003d links.get(\u0027Volumes\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class DrivesCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_c051dd10","line":89,"range":{"start_line":73,"start_character":4,"end_line":89,"end_character":47},"updated":"2017-06-21 08:21:58.000000000","message":"No need for this function.","commit_id":"ff6a5c9fccc8487b400760cf6c1fe9029db7245d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_e2c3ea36","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"Whose rights are we reserving? This should either be removed entirely, or the copyright holder should be added.  Or just replaced with the copyright holder since the agreements re-assigns everything to the foundation anyway.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7601a5a0d46ac47cca56b0883f9a48d5a2d95c0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\"The speed which this drive can communicate to a storage controller"},{"line_number":41,"context_line":"    in ideal conditions in Gigabits per second\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    capacitybytes \u003d base.Field(\u0027CapacityBytes\u0027)"},{"line_number":44,"context_line":"    \"\"\"The size in bytes of this Drive\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    mediatype \u003d base.Field(\u0027MediaType\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_239d3f66","line":43,"updated":"2017-07-08 20:20:25.000000000","message":"\"capacity_bytes\"","commit_id":"b5f244f67aa339485592a3f1f150bfbaa4fe3515"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7601a5a0d46ac47cca56b0883f9a48d5a2d95c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    capacitybytes \u003d base.Field(\u0027CapacityBytes\u0027)"},{"line_number":44,"context_line":"    \"\"\"The size in bytes of this Drive\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    mediatype \u003d base.Field(\u0027MediaType\u0027)"},{"line_number":47,"context_line":"    \"\"\"The type of media contained in this drive\"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    protocol \u003d base.Field(\u0027Protocol\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_039a436d","line":46,"updated":"2017-07-08 20:20:25.000000000","message":"\"media_type\"","commit_id":"b5f244f67aa339485592a3f1f150bfbaa4fe3515"}],"sushy/resources/system/simplestorage.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":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_22d32206","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"Same.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/resources/system/storage.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.health \u003d status.get(\u0027Health\u0027)"},{"line_number":67,"context_line":"        self.storagecontrollers \u003d self.json.get(\u0027StorageControllers\u0027)"},{"line_number":68,"context_line":"        self.drives \u003d self.json.get(\u0027Drives\u0027)"},{"line_number":69,"context_line":"        self.volumes \u003d self.json.get(\u0027Volumes\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class StorageCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_0e2149fc","line":69,"updated":"2017-04-24 06:39:02.000000000","message":"ditto as above, are this real Volume objects?","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"7a6ba8dac06014a0073047eae5918c0f2b30355b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.health \u003d status.get(\u0027Health\u0027)"},{"line_number":67,"context_line":"        self.storagecontrollers \u003d self.json.get(\u0027StorageControllers\u0027)"},{"line_number":68,"context_line":"        self.drives \u003d self.json.get(\u0027Drives\u0027)"},{"line_number":69,"context_line":"        self.volumes \u003d self.json.get(\u0027Volumes\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class StorageCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_18b04ff4","line":69,"in_reply_to":"5ff73747_0e2149fc","updated":"2017-04-25 03:17:50.000000000","message":"I dont understand what you mean by \"real\" Volume? But here you will have the list of Volumes and each one having its own URI","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_c2d34e00","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"same","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7601a5a0d46ac47cca56b0883f9a48d5a2d95c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    description \u003d base.Field(\u0027Description\u0027)"},{"line_number":34,"context_line":"    \"\"\"Description\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    storagecontrollers \u003d base.Field(\u0027StorageControllers\u0027)"},{"line_number":37,"context_line":"    \"\"\"The set of storage controllers\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    drives \u003d base.Field(\u0027Drives\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_83ae5396","line":36,"updated":"2017-07-08 20:20:25.000000000","message":"\"storage_controllers\"","commit_id":"b5f244f67aa339485592a3f1f150bfbaa4fe3515"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    _volume_paths \u003d None"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"},{"line_number":57,"context_line":"    def volume_paths(self):"},{"line_number":58,"context_line":"        self._volume_paths \u003d []"},{"line_number":59,"context_line":"        for mem in self.members:"},{"line_number":60,"context_line":"            path \u003d mem.volumes.get(\u0027@odata.id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_ce7942c5","line":57,"updated":"2017-07-19 14:24:32.000000000","message":"Please add a doc string.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"}],"sushy/resources/system/storage/common.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    if storage_resource is not None:"},{"line_number":67,"context_line":"        volume_max_bytes \u003d _get_attribute_value_of("},{"line_number":68,"context_line":"            storage_resource, \u0027volumes_maximum_size_bytes\u0027, default\u003d0)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # if volume is not found, then traverse through the possible disk drives"},{"line_number":71,"context_line":"    # and get the biggest disk."}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_c8297437","line":68,"updated":"2018-04-11 09:46:57.000000000","message":"I am thinking, that if `_get_attribute_value_of()` would have this signature:\n\n    _get_attribute_value_of(resource, *attribute_names, default\u003dNone)\n\nthen we could make it calling itself recursively for inner resources like this:\n\n    _get_attribute_value_of(system_obj, \u0027storages\u0027, \u0027volumes_maximum_size_bytes\u0027, default\u003d0) \n\nthus reducing the tree walking code like the one I comment on here.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                simple_resource, \u0027maximum_size_bytes\u0027, default\u003d0)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        local_max_bytes \u003d utils.max_safe([drives_max_bytes, simple_max_bytes])"},{"line_number":85,"context_line":"    # Convert the received size to GB and reduce the value by 1 Gb as"},{"line_number":86,"context_line":"    # ironic requires the local_gb to be returned 1 less than actual size."},{"line_number":87,"context_line":"    local_gb \u003d 0"},{"line_number":88,"context_line":"    if local_max_bytes \u003e 0:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_c885f408","line":85,"range":{"start_line":85,"start_character":64,"end_line":85,"end_character":66},"updated":"2018-04-11 09:46:57.000000000","message":"nit: perhaps GB(yte), not Gb(it)","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    # ironic requires the local_gb to be returned 1 less than actual size."},{"line_number":87,"context_line":"    local_gb \u003d 0"},{"line_number":88,"context_line":"    if local_max_bytes \u003e 0:"},{"line_number":89,"context_line":"        local_gb \u003d int(local_max_bytes / (1024 * 1024 * 1024)) - 1"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        msg \u003d (\u0027The maximum size for the hard disk or logical \u0027"},{"line_number":92,"context_line":"               \u0027volume could not be determined.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_08be8cb3","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":16},"updated":"2018-04-11 09:46:57.000000000","message":"Can `local_gb` turn negative? May be `return max(0, local_gb)`","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/storage/drive.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_481b24c9","line":1,"updated":"2018-04-11 09:46:57.000000000","message":"The license in this file seems to lack the HP reference unlike other newly created ones. I can see the same thing with some other files in this patch.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_f6b0598e","line":1,"in_reply_to":"bf659307_481b24c9","updated":"2018-04-16 10:55:55.000000000","message":"Done","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/storage/simple_storage.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class HealthStatusField(base.CompositeField):"},{"line_number":22,"context_line":"    health \u003d base.Field(\u0027Health\u0027)"},{"line_number":23,"context_line":"    state \u003d base.Field(\u0027State\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SimpleStorage(base.ResourceBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_e8f0f869","line":23,"range":{"start_line":22,"start_character":1,"end_line":23,"end_character":31},"updated":"2018-04-11 09:46:57.000000000","message":"Missing docstrings","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class HealthStatusField(base.CompositeField):"},{"line_number":22,"context_line":"    health \u003d base.Field(\u0027Health\u0027)"},{"line_number":23,"context_line":"    state \u003d base.Field(\u0027State\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SimpleStorage(base.ResourceBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_85bbe1e3","line":23,"range":{"start_line":22,"start_character":1,"end_line":23,"end_character":31},"in_reply_to":"bf659307_e8f0f869","updated":"2018-04-16 10:55:55.000000000","message":"This field is not required as of now.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"The name of the resource or array element\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    description \u003d base.Field(\u0027Description\u0027)"},{"line_number":35,"context_line":"    \"\"\"Description\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    devices \u003d base.Field(\u0027Devices\u0027)"},{"line_number":38,"context_line":"    \"\"\"The storage devices associated with this resource\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_e8c79811","line":35,"range":{"start_line":35,"start_character":7,"end_line":35,"end_character":18},"updated":"2018-04-11 09:46:57.000000000","message":"My be \"Description of the simple storage resource\"?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"The name of the resource or array element\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    description \u003d base.Field(\u0027Description\u0027)"},{"line_number":35,"context_line":"    \"\"\"Description\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    devices \u003d base.Field(\u0027Devices\u0027)"},{"line_number":38,"context_line":"    \"\"\"The storage devices associated with this resource\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_65ba4ddf","line":35,"range":{"start_line":35,"start_character":7,"end_line":35,"end_character":18},"in_reply_to":"bf659307_e8c79811","updated":"2018-04-16 10:55:55.000000000","message":"ditto","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    devices \u003d base.Field(\u0027Devices\u0027)"},{"line_number":38,"context_line":"    \"\"\"The storage devices associated with this resource\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    status \u003d HealthStatusField(\"Status\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class SimpleStorageCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_68db88ec","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":10},"updated":"2018-04-11 09:46:57.000000000","message":"Missing docstring.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    devices \u003d base.Field(\u0027Devices\u0027)"},{"line_number":38,"context_line":"    \"\"\"The storage devices associated with this resource\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    status \u003d HealthStatusField(\"Status\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class SimpleStorageCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_25cc5588","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":10},"in_reply_to":"bf659307_68db88ec","updated":"2018-04-16 10:55:55.000000000","message":"ditto","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def size(self):"},{"line_number":53,"context_line":"        _size \u003d 0"},{"line_number":54,"context_line":"        for mem in self.members:"},{"line_number":55,"context_line":"            for device in mem.devices:"},{"line_number":56,"context_line":"                if _size \u003c device.get(\"CapacityBytes\"):"},{"line_number":57,"context_line":"                    _size \u003d device.get(\"CapacityBytes\")"},{"line_number":58,"context_line":"        return _size"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_68b2a896","line":57,"range":{"start_line":54,"start_character":0,"end_line":57,"end_character":55},"updated":"2018-04-11 09:46:57.000000000","message":"How about something along these lines?\n\nreturn max(0, *(device.get(\"CapacityBytes\") for device in mem.devices for mem in self.members))","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def size(self):"},{"line_number":53,"context_line":"        _size \u003d 0"},{"line_number":54,"context_line":"        for mem in self.members:"},{"line_number":55,"context_line":"            for device in mem.devices:"},{"line_number":56,"context_line":"                if _size \u003c device.get(\"CapacityBytes\"):"},{"line_number":57,"context_line":"                    _size \u003d device.get(\"CapacityBytes\")"},{"line_number":58,"context_line":"        return _size"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_c59d5967","line":57,"range":{"start_line":54,"start_character":0,"end_line":57,"end_character":55},"in_reply_to":"bf659307_68b2a896","updated":"2018-04-16 10:55:55.000000000","message":"Have taken care of. Please see in the newly raised patch.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/storage/storage.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"The name of the resource or array element\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    description \u003d base.Field(\u0027Description\u0027)"},{"line_number":36,"context_line":"    \"\"\"Description\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    drives \u003d base.Field(\u0027Drives\u0027)"},{"line_number":39,"context_line":"    \"\"\"The set of drives attached to the storage controllers\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_7e133e5d","line":36,"range":{"start_line":36,"start_character":7,"end_line":36,"end_character":18},"updated":"2018-04-11 09:46:57.000000000","message":"May be \"Description of the storage resource\"?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        :return a list of drives."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        drives_list \u003d []"},{"line_number":64,"context_line":"        for member in self.drives:"},{"line_number":65,"context_line":"            drives_list.append(sys_drives.Drive("},{"line_number":66,"context_line":"                self._conn, member.get(\u0027@odata.id\u0027), self.redfish_version))"},{"line_number":67,"context_line":"        return drives_list"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def drives_maximum_size_bytes(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_3eb5c632","line":67,"range":{"start_line":63,"start_character":7,"end_line":67,"end_character":26},"updated":"2018-04-11 09:46:57.000000000","message":"How about:\n\nreturn [sys_drives.Drive(self._conn, member.get(\u0027@odata.id\u0027), self.redfish_version)\n        for member in self.drives]\n\n?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"e7bf8fa5b9ab674182af0ff2909b9768915d1fb1","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        :return a list of drives."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        drives_list \u003d []"},{"line_number":64,"context_line":"        for member in self.drives:"},{"line_number":65,"context_line":"            drives_list.append(sys_drives.Drive("},{"line_number":66,"context_line":"                self._conn, member.get(\u0027@odata.id\u0027), self.redfish_version))"},{"line_number":67,"context_line":"        return drives_list"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def drives_maximum_size_bytes(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_d67c35b7","line":67,"range":{"start_line":63,"start_character":7,"end_line":67,"end_character":26},"in_reply_to":"bf659307_3eb5c632","updated":"2018-04-16 10:55:55.000000000","message":"Have taken of in a slightly different way.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    def _do_refresh(self, force):"},{"line_number":129,"context_line":"        \"\"\"Do custom resource specific refresh activities"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        On refresh, all sub-resources are marked as stale, i.e."},{"line_number":132,"context_line":"        greedy-refresh not done for them unless forced by ``force``"},{"line_number":133,"context_line":"        argument."},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":"        self._volumes_maximum_size_bytes \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_1e66c2c2","line":132,"range":{"start_line":131,"start_character":59,"end_line":132,"end_character":41},"updated":"2018-04-11 09:46:57.000000000","message":"This is probably not so for this method.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/storage/volume.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from sushy.resources import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from proliantutils.redfish import utils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_3e18661c","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":39},"updated":"2018-04-11 09:46:57.000000000","message":"Is this a new dependency? Is it vendor-specific?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"27877a9f38f53efdf52a49496d077a485543015d","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from sushy.resources import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from proliantutils.redfish import utils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_cc4b96ae","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":39},"in_reply_to":"bf659307_3e18661c","updated":"2018-04-12 17:59:59.000000000","message":"I am sure that this is not relevant at all! Possibly as this patch was marked as a WIP one, all such things were yet to be cleaned up.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def _do_refresh(self, force):"},{"line_number":53,"context_line":"        \"\"\"Do custom resource specific refresh activities"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        On refresh, all sub-resources are marked as stale, i.e."},{"line_number":56,"context_line":"        greedy-refresh not done for them unless forced by ``force``"},{"line_number":57,"context_line":"        argument."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        self._maximum_size_bytes \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_7ee7be13","line":56,"range":{"start_line":55,"start_character":59,"end_line":56,"end_character":40},"updated":"2018-04-11 09:46:57.000000000","message":"Probably not true for this method.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"27877a9f38f53efdf52a49496d077a485543015d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def _do_refresh(self, force):"},{"line_number":53,"context_line":"        \"\"\"Do custom resource specific refresh activities"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        On refresh, all sub-resources are marked as stale, i.e."},{"line_number":56,"context_line":"        greedy-refresh not done for them unless forced by ``force``"},{"line_number":57,"context_line":"        argument."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        self._maximum_size_bytes \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_2cd812ed","line":56,"range":{"start_line":55,"start_character":59,"end_line":56,"end_character":40},"in_reply_to":"bf659307_7ee7be13","updated":"2018-04-12 17:59:59.000000000","message":"Done","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/system.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @property"},{"line_number":270,"context_line":"    def simplestorage_collection(self):"},{"line_number":271,"context_line":"        if self._simplestorage_collection is None:"},{"line_number":272,"context_line":"            simple_collection \u003d simplestorage.SimpleStorageCollection("},{"line_number":273,"context_line":"                self._conn, self._get_simplestorage_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_8e0d5992","line":270,"updated":"2017-04-24 06:39:02.000000000","message":"simple_storage? I\u0027m pretty much against using word \"collection\" in these properties, it seems redundant.","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"7a6ba8dac06014a0073047eae5918c0f2b30355b","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @property"},{"line_number":270,"context_line":"    def simplestorage_collection(self):"},{"line_number":271,"context_line":"        if self._simplestorage_collection is None:"},{"line_number":272,"context_line":"            simple_collection \u003d simplestorage.SimpleStorageCollection("},{"line_number":273,"context_line":"                self._conn, self._get_simplestorage_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_f87da31c","line":270,"in_reply_to":"5ff73747_8e0d5992","updated":"2017-04-25 03:17:50.000000000","message":"These are the redfish standard resources names.","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        return self._simplestorage_collection"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    @property"},{"line_number":279,"context_line":"    def storage_collection(self):"},{"line_number":280,"context_line":"        if self._storage_collection is None:"},{"line_number":281,"context_line":"            storage_collection \u003d storage.StorageCollection("},{"line_number":282,"context_line":"                self._conn, self._get_storage_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_6e120db4","line":279,"updated":"2017-04-24 06:39:02.000000000","message":"just storage?","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"7a6ba8dac06014a0073047eae5918c0f2b30355b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        return self._simplestorage_collection"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    @property"},{"line_number":279,"context_line":"    def storage_collection(self):"},{"line_number":280,"context_line":"        if self._storage_collection is None:"},{"line_number":281,"context_line":"            storage_collection \u003d storage.StorageCollection("},{"line_number":282,"context_line":"                self._conn, self._get_storage_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_788f5323","line":279,"in_reply_to":"5ff73747_6e120db4","updated":"2017-04-25 03:17:50.000000000","message":"See my explanation in the patch overall where we post the comments.","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        return self._storage_collection"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @property"},{"line_number":288,"context_line":"    def volumes_collection(self):"},{"line_number":289,"context_line":"        if self._volumes_collection is None:"},{"line_number":290,"context_line":"            volumes_collection \u003d volumes.VolumesCollection("},{"line_number":291,"context_line":"                self._conn, self._get_volumes_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_4e275114","line":288,"updated":"2017-04-24 06:39:02.000000000","message":"volumes?","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"7a6ba8dac06014a0073047eae5918c0f2b30355b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        return self._storage_collection"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @property"},{"line_number":288,"context_line":"    def volumes_collection(self):"},{"line_number":289,"context_line":"        if self._volumes_collection is None:"},{"line_number":290,"context_line":"            volumes_collection \u003d volumes.VolumesCollection("},{"line_number":291,"context_line":"                self._conn, self._get_volumes_collection_path(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_58949737","line":288,"in_reply_to":"5ff73747_4e275114","updated":"2017-04-25 03:17:50.000000000","message":"ditto","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        return self._volumes_collection"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @property"},{"line_number":297,"context_line":"    def storage_summary(self):"},{"line_number":298,"context_line":"        if self._local_gb is None:"},{"line_number":299,"context_line":"            size \u003d 0"},{"line_number":300,"context_line":"            members \u003d self.simplestorage_collection.get_members()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_2e24050d","line":297,"updated":"2017-04-24 06:39:02.000000000","message":"this logic is quite opinionated, I don\u0027t think it should live in sushy. I suggest we do this local_gb calculation on Ironic side, and only expose devices here.","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    def _get_simplestorage_collection_path(self):"},{"line_number":280,"context_line":"        \"\"\"Helper function to find the SimpleStorageCollection path\"\"\""},{"line_number":281,"context_line":"        simple_col \u003d self.json.get(\u0027SimpleStorage\u0027)"},{"line_number":282,"context_line":"        return simple_col.get(\u0027@odata.id\u0027)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_storage_collection_path(self):"},{"line_number":285,"context_line":"        \"\"\"Helper function to find the StorageCollection path\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_ae5ec4e3","line":282,"updated":"2017-06-30 08:32:39.000000000","message":"this should be converted to a Field (the whole method), something like\n\n _simple_storage_id \u003d Field([\u0027SimpleStorage\u0027, \u0027@odata.id\u0027])","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    def _get_simplestorage_collection_path(self):"},{"line_number":280,"context_line":"        \"\"\"Helper function to find the SimpleStorageCollection path\"\"\""},{"line_number":281,"context_line":"        simple_col \u003d self.json.get(\u0027SimpleStorage\u0027)"},{"line_number":282,"context_line":"        return simple_col.get(\u0027@odata.id\u0027)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_storage_collection_path(self):"},{"line_number":285,"context_line":"        \"\"\"Helper function to find the StorageCollection path\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_6aff7501","line":282,"in_reply_to":"3f1d235d_ae5ec4e3","updated":"2017-06-30 10:29:26.000000000","message":"Also, make sure you don\u0027t make it ``required-True`` as I have seen some systems w/o ``SimpleStorage`` but with only ``Storage``.\nditto for others","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    def _get_storage_collection_path(self):"},{"line_number":285,"context_line":"        \"\"\"Helper function to find the StorageCollection path\"\"\""},{"line_number":286,"context_line":"        storage_col \u003d self.json.get(\u0027Storage\u0027)"},{"line_number":287,"context_line":"        return storage_col.get(\u0027@odata.id\u0027)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _get_volumes_collection_path(self):"},{"line_number":290,"context_line":"        \"\"\"Helper function to find the VolumesCollection path\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_8e730881","line":287,"updated":"2017-06-30 08:32:39.000000000","message":"ditto","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _get_volumes_collection_path(self):"},{"line_number":290,"context_line":"        \"\"\"Helper function to find the VolumesCollection path\"\"\""},{"line_number":291,"context_line":"        vol_col \u003d self.json.get(\u0027Volumes\u0027)"},{"line_number":292,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_eacf057d","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":42},"updated":"2017-06-30 10:29:26.000000000","message":"do we get the \u0027Volumes\u0027 from any System\u0027s json response?","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def _get_volumes_collection_path(self):"},{"line_number":290,"context_line":"        \"\"\"Helper function to find the VolumesCollection path\"\"\""},{"line_number":291,"context_line":"        vol_col \u003d self.json.get(\u0027Volumes\u0027)"},{"line_number":292,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @property"},{"line_number":295,"context_line":"    def simplestorage_members(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_6e70ac73","line":292,"updated":"2017-06-30 08:32:39.000000000","message":"ditto","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @property"},{"line_number":295,"context_line":"    def simplestorage_members(self):"},{"line_number":296,"context_line":"        path \u003d self._get_simplestorage_collection_path()"},{"line_number":297,"context_line":"        members \u003d []"},{"line_number":298,"context_line":"        if path:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_4e6df096","line":295,"updated":"2017-06-30 08:32:39.000000000","message":"let\u0027s expose simple_storage(), storage() and volumes() instead, returning appropriate *Collection objects. users can call get_members() on them separately.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        return vol_col.get(\u0027@odata.id\u0027)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @property"},{"line_number":295,"context_line":"    def simplestorage_members(self):"},{"line_number":296,"context_line":"        path \u003d self._get_simplestorage_collection_path()"},{"line_number":297,"context_line":"        members \u003d []"},{"line_number":298,"context_line":"        if path:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_4a2dd993","line":295,"in_reply_to":"3f1d235d_4e6df096","updated":"2017-06-30 10:29:26.000000000","message":"++\nOr most probably as property\u0027s form instead of methods. E.g.\n\n    sys_inst.simple_storage  # SimpleStorageCollection object\n    sys_inst.storage         # StorageCollection object\n    sys_inst.volumes         # VolumeCollection object","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    def simplestorage_members(self):"},{"line_number":296,"context_line":"        path \u003d self._get_simplestorage_collection_path()"},{"line_number":297,"context_line":"        members \u003d []"},{"line_number":298,"context_line":"        if path:"},{"line_number":299,"context_line":"            simple_collection \u003d simplestorage.SimpleStorageCollection("},{"line_number":300,"context_line":"                self._conn, path, redfish_version\u003dself.redfish_version)"},{"line_number":301,"context_line":"            members \u003d simple_collection.get_members()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_2e6ab47f","line":298,"updated":"2017-06-30 08:32:39.000000000","message":"this should raise an exception","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def storage_members(self):"},{"line_number":306,"context_line":"        path \u003d self.self._get_storage_collection_path()"},{"line_number":307,"context_line":"        members \u003d []"},{"line_number":308,"context_line":"        if path:"},{"line_number":309,"context_line":"            storage_collection \u003d storage.StorageCollection("},{"line_number":310,"context_line":"                self._conn, path, redfish_version\u003dself.redfish_version)"},{"line_number":311,"context_line":"            members \u003d storage_collection.get_members()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_0e05b8c2","line":308,"updated":"2017-06-30 08:32:39.000000000","message":"ditto","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        return members"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @property"},{"line_number":315,"context_line":"    def volumes_members(self, path):"},{"line_number":316,"context_line":"        members \u003d []"},{"line_number":317,"context_line":"        volumes_collection \u003d volumes.VolumesCollection("},{"line_number":318,"context_line":"            self._conn, path, redfish_version\u003dself.redfish_version)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_ee095cdd","line":315,"updated":"2017-06-30 08:32:39.000000000","message":"path should be retrieved via a Field replacing _get_volumes_collection_path","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        return members"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    @property"},{"line_number":323,"context_line":"    def storage_summary(self):"},{"line_number":324,"context_line":"        \"\"\"Gets the storage size."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        Redfish standards supports the disk data in following possible ways:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_ce0ea0e4","line":323,"updated":"2017-06-30 08:32:39.000000000","message":"I suggest this go to SimpleStorageCollection as summary() function.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        return members"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    @property"},{"line_number":323,"context_line":"    def storage_summary(self):"},{"line_number":324,"context_line":"        \"\"\"Gets the storage size."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        Redfish standards supports the disk data in following possible ways:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_4aeef922","line":323,"in_reply_to":"3f1d235d_ce0ea0e4","updated":"2017-06-30 10:29:26.000000000","message":"++\nFor a reference have a look at: https://github.com/openstack/sushy/blob/master/sushy/resources/system/processor.py#L86","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    @property"},{"line_number":323,"context_line":"    def storage_summary(self):"},{"line_number":324,"context_line":"        \"\"\"Gets the storage size."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        Redfish standards supports the disk data in following possible ways:"},{"line_number":327,"context_line":"        1. /redfish/v1/Systems/\u003cSystem_id\u003e/SimpleStorage - simple collection"},{"line_number":328,"context_line":"        2. /redfish/v1/Systems/\u003cSystem_id\u003e/Storage - Storage collection"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_1fdf6169","line":325,"updated":"2017-06-28 13:53:51.000000000","message":"nit: I would prefer that we add links to the schema documents in the doc string as well.  This will help with maintainability down the road.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    @property"},{"line_number":323,"context_line":"    def storage_summary(self):"},{"line_number":324,"context_line":"        \"\"\"Gets the storage size."},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        Redfish standards supports the disk data in following possible ways:"},{"line_number":327,"context_line":"        1. /redfish/v1/Systems/\u003cSystem_id\u003e/SimpleStorage - simple collection"},{"line_number":328,"context_line":"        2. /redfish/v1/Systems/\u003cSystem_id\u003e/Storage - Storage collection"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_2aabbd89","line":325,"in_reply_to":"5f201791_1fdf6169","updated":"2017-06-30 10:29:26.000000000","message":"++\nThis is also developer friendly, But providing links in addition to this is sweeter :)","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        2. /redfish/v1/Systems/\u003cSystem_id\u003e/Storage - Storage collection"},{"line_number":329,"context_line":"        3. /redfish/v1/Systems/\u003cSystem_id\u003e/Storage/\u003cstorage_id\u003e/Volumes -"},{"line_number":330,"context_line":"           Volume collection."},{"line_number":331,"context_line":"        4. /redfish/v1/Systems/\u003cSystem_id\u003e/Storage/\u003cstorage_id\u003e/\u003cDrive_id\u003e"},{"line_number":332,"context_line":"           - Drive URIs."},{"line_number":333,"context_line":"           or"},{"line_number":334,"context_line":"          /redfish/v1/Chassis/\u003cChassis_id\u003e/\u003cDrive_id\u003e - drive URIs"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_2a0e1d8d","line":331,"range":{"start_line":331,"start_character":11,"end_line":331,"end_character":74},"updated":"2017-06-30 10:29:26.000000000","message":"this should be /redfish/v1/Systems/\u003cSystem_id\u003e/Storage/\u003cstorage_id\u003e/Drives/\u003cDrive_id\u003e","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0bb7dc6a5e40e3ca158396bcc0fc3a6105cd1ca0","unresolved":false,"context_lines":[{"line_number":353,"context_line":"            self._local_gb \u003d size"},{"line_number":354,"context_line":"        return self._local_gb"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def get_disk_size_from_storage_uri(self):"},{"line_number":357,"context_line":"        \"\"\"Gets volume/disk size."},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        The pseudo algo followed is:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_ae13640d","line":356,"updated":"2017-06-30 08:32:39.000000000","message":"I think \"from_storage_uri\" is a techinical detail. I\u0027d prefer this name to reflect *what* it actually fetches. Which disk?","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":356,"context_line":"    def get_disk_size_from_storage_uri(self):"},{"line_number":357,"context_line":"        \"\"\"Gets volume/disk size."},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        The pseudo algo followed is:"},{"line_number":360,"context_line":"            1. Get members from Storage collection."},{"line_number":361,"context_line":"            2. Check if [\u0027Volumes\u0027] is present in each of the Storage member."},{"line_number":362,"context_line":"            3. If present, get Volumes collection given in the Storage member"},{"line_number":363,"context_line":"               data."},{"line_number":364,"context_line":"            4. parse through each volume member and get the max volume size."},{"line_number":365,"context_line":"            5. If [\u0027Volumes\u0027] is not present in any of the Storage, then"},{"line_number":366,"context_line":"               check if the [\u0027Drives\u0027] is present.(DAS case)"},{"line_number":367,"context_line":"            6. if \u00275\u0027 is yes, then traverse through each drive URI and get the"},{"line_number":368,"context_line":"               disk with greatest size.(drive URI may or may not be part of"},{"line_number":369,"context_line":"               Storage collection)."},{"line_number":370,"context_line":"            7. Follow steps 2 to 6 for each member of Storage collection."},{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        members \u003d self.storage_members()"},{"line_number":373,"context_line":"        size \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_6d378fb2","line":370,"range":{"start_line":359,"start_character":8,"end_line":370,"end_character":73},"updated":"2017-06-30 10:29:26.000000000","message":"Firstly, I think the \u0027storage\u0027 portion should come as a package inside system package because there is a whole bunch of things associated with storage stuff. And invariably the drives and volumes modules should remain under that \u0027storage\u0027 package.\n\nSecondly, the logic of calculating storage related params, e.g. locally available disk size should reside under that package, most probably from the storage.py file inside \u0027/system/storage/\u0027 package, i.e the entry level file of storage domain.\n\nAlso, about the logic are we concentrating to get the max size or the cumulative size (all storage available to any particular system)? I am little confused here. Please clarify.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                if vol is not None:"},{"line_number":378,"context_line":"                    vol_collection_uri \u003d vol[\u0027@odataid\u0027]"},{"line_number":379,"context_line":"                    vol_members \u003d self.volumes_members(vol_collection_uri)"},{"line_number":380,"context_line":"                    for v_mem in vol_members:"},{"line_number":381,"context_line":"                        if size \u003c v_mem.get(\"CapacityBytes\"):"},{"line_number":382,"context_line":"                            size \u003d v_mem.get(\"CapacityBytes\")"},{"line_number":383,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_bff62d5c","line":380,"range":{"start_line":380,"start_character":26,"end_line":380,"end_character":29},"updated":"2017-06-28 13:53:51.000000000","message":"nit: you may want to rename v_mem to v_size.  I looked at it and thought \"virtual memory\"","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                                                   self.redfish_version)"},{"line_number":390,"context_line":"                            if size \u003c dr_obj.capacitybytes:"},{"line_number":391,"context_line":"                                size \u003d dr_obj.capacitybytes"},{"line_number":392,"context_line":"        self._local_gb \u003d size"},{"line_number":393,"context_line":"        return self._local_gb"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"class SystemCollection(base.ResourceCollectionBase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_ffaee52b","line":393,"range":{"start_line":392,"start_character":8,"end_line":393,"end_character":29},"updated":"2017-06-28 13:53:51.000000000","message":"Setting self.local_gb here, and then resetting it in the method that calls this method seems a little odd.  perhaps just \"return size\"?","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"96c510afd10c600e5ae6bca296f392e59b854ccd","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def refresh(self):"},{"line_number":275,"context_line":"        super(System, self).refresh()"},{"line_number":276,"context_line":"        self._processors \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    @property"},{"line_number":279,"context_line":"    def ethernet_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1f1a1f67_36b39b9a","line":276,"updated":"2017-07-18 13:28:47.000000000","message":"here all cached fields should be reset to None","commit_id":"d64aab15c4f56451f4f8905faf5a6a272dd2609e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        return self._ethernet_interfaces"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    @property"},{"line_number":296,"context_line":"    def simplestorage(self):"},{"line_number":297,"context_line":"        path \u003d self._simple_storage_path"},{"line_number":298,"context_line":"        if path:"},{"line_number":299,"context_line":"            self._simplestorage \u003d simplestorage.SimpleStorageCollection("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_ceddc2dd","line":296,"updated":"2017-07-19 14:24:32.000000000","message":"Wouldn\u0027t it be useful to users of this library to put a doctoring in to describe the property?","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        return self._simplestorage"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @property"},{"line_number":304,"context_line":"    def storage(self):"},{"line_number":305,"context_line":"        path \u003d self._storage_path"},{"line_number":306,"context_line":"        if path:"},{"line_number":307,"context_line":"            self._storage \u003d storage.StorageCollection("}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_aef2866e","line":304,"updated":"2017-07-19 14:24:32.000000000","message":"ditto","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        return self._storage"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @property"},{"line_number":312,"context_line":"    def volume(self):"},{"line_number":313,"context_line":"        self._volume \u003d []"},{"line_number":314,"context_line":"        volume_paths \u003d self.storage.volume_paths"},{"line_number":315,"context_line":"        if volume_paths is not None or len(volume_paths) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_8ef58a59","line":312,"updated":"2017-07-19 14:24:32.000000000","message":"ditto","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        return self._volume"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    @property"},{"line_number":323,"context_line":"    def diskdrive(self):"},{"line_number":324,"context_line":"        members \u003d self.storage.get_members()"},{"line_number":325,"context_line":"        for member in members:"},{"line_number":326,"context_line":"            path \u003d self._storage.drives.get(\u0027@odata.id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_0e017a38","line":323,"updated":"2017-07-19 14:24:32.000000000","message":"ditto.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        3. Compares the disk size returned in 1 and 2 above."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""},{"line_number":351,"context_line":"        and \"Storage\" URIs both and has the vendor specific storage URI."},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        size \u003d 0"},{"line_number":354,"context_line":"        if self._storage_path:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_0e53ba6c","line":351,"updated":"2017-07-19 14:24:32.000000000","message":"This may be a parameter value, but we should at least document in the doctoring what the value should be expected to be in simple terms.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        3. Compares the disk size returned in 1 and 2 above."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""},{"line_number":351,"context_line":"        and \"Storage\" URIs both and has the vendor specific storage URI."},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        size \u003d 0"},{"line_number":354,"context_line":"        if self._storage_path:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_bd78768f","line":351,"in_reply_to":"1f1a1f67_0e53ba6c","updated":"2017-07-19 16:16:23.000000000","message":"Sure. I would add that","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        size \u003d 0"},{"line_number":354,"context_line":"        if self._storage_path:"},{"line_number":355,"context_line":"            size \u003d self._get_disk_size_from_storage_uri()"},{"line_number":356,"context_line":"        if self._simple_storage_path and not self._volume:"},{"line_number":357,"context_line":"            if size \u003c self.simplestorage.size:"},{"line_number":358,"context_line":"                size \u003d self.simplestorage.size"},{"line_number":359,"context_line":"        self._local_gb \u003d size / (1024 * 1024 * 1024)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_8e7eaae1","line":356,"updated":"2017-07-19 14:24:32.000000000","message":"Wouldn\u0027t the biggest volume be preferable first in most enterprise environments, and from there it would then go to lesser types of storage?  Or am I misunderstanding the concept of volumes possibly being raid sets?","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        size \u003d 0"},{"line_number":354,"context_line":"        if self._storage_path:"},{"line_number":355,"context_line":"            size \u003d self._get_disk_size_from_storage_uri()"},{"line_number":356,"context_line":"        if self._simple_storage_path and not self._volume:"},{"line_number":357,"context_line":"            if size \u003c self.simplestorage.size:"},{"line_number":358,"context_line":"                size \u003d self.simplestorage.size"},{"line_number":359,"context_line":"        self._local_gb \u003d size / (1024 * 1024 * 1024)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_fd482e5c","line":356,"in_reply_to":"1f1a1f67_8e7eaae1","updated":"2017-07-19 16:16:23.000000000","message":"You are right. The biggest volume is the first prefernce. If there is no volume, then it gets the disk of the greatest size.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            6. if \u00275\u0027 is yes, then traverse through each drive URI and get the"},{"line_number":374,"context_line":"               disk with greatest size.(drive URI may or may not be part of"},{"line_number":375,"context_line":"               Storage collection)."},{"line_number":376,"context_line":"            7. Follow steps 2 to 6 for each member of Storage collection."},{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        size \u003d 0"},{"line_number":379,"context_line":"        volume_members \u003d self.volume"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_6e6b4ef0","line":376,"updated":"2017-07-19 14:24:32.000000000","message":"Please add a entry to the doc string that expresses what the returned value is.  Is it bytes, megabytes, is it integer, a string, etc.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            6. if \u00275\u0027 is yes, then traverse through each drive URI and get the"},{"line_number":374,"context_line":"               disk with greatest size.(drive URI may or may not be part of"},{"line_number":375,"context_line":"               Storage collection)."},{"line_number":376,"context_line":"            7. Follow steps 2 to 6 for each member of Storage collection."},{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        size \u003d 0"},{"line_number":379,"context_line":"        volume_members \u003d self.volume"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_9da01af6","line":376,"in_reply_to":"1f1a1f67_6e6b4ef0","updated":"2017-07-19 16:16:23.000000000","message":"ok","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        \u0027\u003c/redfish/v1/Systems/\u003cSystem_id\u003e/Storage/\u003cSt_id\u003e/Drives/\u003cDr_type\u003e/\u0027"},{"line_number":413,"context_line":"        or"},{"line_number":414,"context_line":"        \u0027\u003c/redfish/v1/Chassis/\u003cchassis_id\u003e/Drives/\u003cDrive_type\u003e/\u0027"},{"line_number":415,"context_line":"        gives no data and is invalid URI."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_ee907eef","line":415,"updated":"2017-07-19 14:24:32.000000000","message":"param documented, but return is not documented.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11297,"name":"Nisha Agarwal","email":"agarwalnisha1980@gmail.com","username":"Nisha"},"change_message_id":"e85f440a8dffd85b72da4e875964e269aab98622","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        \u0027\u003c/redfish/v1/Systems/\u003cSystem_id\u003e/Storage/\u003cSt_id\u003e/Drives/\u003cDr_type\u003e/\u0027"},{"line_number":413,"context_line":"        or"},{"line_number":414,"context_line":"        \u0027\u003c/redfish/v1/Chassis/\u003cchassis_id\u003e/Drives/\u003cDrive_type\u003e/\u0027"},{"line_number":415,"context_line":"        gives no data and is invalid URI."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_7da3fe00","line":415,"in_reply_to":"1f1a1f67_ee907eef","updated":"2017-07-19 16:16:23.000000000","message":"ok","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb91301732e9ad70456c5b43e365ae9ba35444b9","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        or"},{"line_number":414,"context_line":"        \u0027\u003c/redfish/v1/Chassis/\u003cchassis_id\u003e/Drives/\u003cDrive_type\u003e/\u0027"},{"line_number":415,"context_line":"        gives no data and is invalid URI."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        size \u003d 0"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_8e9a2a11","line":416,"updated":"2017-07-19 14:24:32.000000000","message":"nit: excess line.","commit_id":"516ebcd759dc239130ec8c7e20b4044077fb129e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        return self._diskdrive"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    @property"},{"line_number":351,"context_line":"    def storage_summary(self):"},{"line_number":352,"context_line":"        \"\"\"Gets the storage size."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        Redfish standards supports the disk data in following possible ways:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_394c00c7","line":351,"range":{"start_line":351,"start_character":8,"end_line":351,"end_character":23},"updated":"2018-04-11 09:46:57.000000000","message":"Property name sounds confusing to me. May be smith like  `available_storage_size`?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        The algorithm followed is:"},{"line_number":365,"context_line":"        1. Get the biggest size from SimpleStorage if SimpleStorage is present."},{"line_number":366,"context_line":"        2. If the volume is present, get the biggest volume size else get the"},{"line_number":367,"context_line":"           biggest disk size(DAS)."},{"line_number":368,"context_line":"        3. Compares the disk size returned in 1 and 2 above."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_beb23605","line":367,"range":{"start_line":367,"start_character":28,"end_line":367,"end_character":29},"updated":"2018-04-11 09:46:57.000000000","message":"nit: space","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        1. Get the biggest size from SimpleStorage if SimpleStorage is present."},{"line_number":366,"context_line":"        2. If the volume is present, get the biggest volume size else get the"},{"line_number":367,"context_line":"           biggest disk size(DAS)."},{"line_number":368,"context_line":"        3. Compares the disk size returned in 1 and 2 above."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""},{"line_number":371,"context_line":"        and \"Storage\" URIs both and has the vendor specific storage URI."}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_1ea7a2bf","line":368,"range":{"start_line":368,"start_character":11,"end_line":368,"end_character":19},"updated":"2018-04-11 09:46:57.000000000","message":"nit: first person singular?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":367,"context_line":"           biggest disk size(DAS)."},{"line_number":368,"context_line":"        3. Compares the disk size returned in 1 and 2 above."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""},{"line_number":371,"context_line":"        and \"Storage\" URIs both and has the vendor specific storage URI."},{"line_number":372,"context_line":"        \"\"\""},{"line_number":373,"context_line":"        size \u003d 0"},{"line_number":374,"context_line":"        if self._storage_path:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_fe8f4e20","line":371,"range":{"start_line":370,"start_character":52,"end_line":371,"end_character":32},"updated":"2018-04-11 09:46:57.000000000","message":"May be:\n\n...neither \"SimpleStorage\" nor \"Storage\" URIs, but has some vendor specific storage URI.","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        There is a possibility that the system does not have \"SimpleStorage\""},{"line_number":371,"context_line":"        and \"Storage\" URIs both and has the vendor specific storage URI."},{"line_number":372,"context_line":"        \"\"\""},{"line_number":373,"context_line":"        size \u003d 0"},{"line_number":374,"context_line":"        if self._storage_path:"},{"line_number":375,"context_line":"            size \u003d self._get_disk_size_from_storage_uri()"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_997bcc26","line":372,"range":{"start_line":372,"start_character":8,"end_line":372,"end_character":11},"updated":"2018-04-11 09:46:57.000000000","message":"nit: should we document :returns: and the units?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        size \u003d 0"},{"line_number":374,"context_line":"        if self._storage_path:"},{"line_number":375,"context_line":"            size \u003d self._get_disk_size_from_storage_uri()"},{"line_number":376,"context_line":"        if self._simple_storage_path and not self._volume:"},{"line_number":377,"context_line":"            if size \u003c self.simplestorage.size:"},{"line_number":378,"context_line":"                size \u003d self.simplestorage.size"},{"line_number":379,"context_line":"        self._local_gb \u003d size / (1024 * 1024 * 1024)"},{"line_number":380,"context_line":"        return self._local_gb"},{"line_number":381,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_9ef7328c","line":378,"range":{"start_line":376,"start_character":8,"end_line":378,"end_character":46},"updated":"2018-04-11 09:46:57.000000000","message":"This indirect verification of SimpleStorage availability looks confusing to me. ;-)","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        if self._simple_storage_path and not self._volume:"},{"line_number":377,"context_line":"            if size \u003c self.simplestorage.size:"},{"line_number":378,"context_line":"                size \u003d self.simplestorage.size"},{"line_number":379,"context_line":"        self._local_gb \u003d size / (1024 * 1024 * 1024)"},{"line_number":380,"context_line":"        return self._local_gb"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def _get_disk_size_from_storage_uri(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_9e6ad217","line":379,"range":{"start_line":379,"start_character":13,"end_line":379,"end_character":22},"updated":"2018-04-11 09:46:57.000000000","message":"Is `_local_gb` object attribute ever used?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":394,"context_line":"               disk with greatest size.(drive URI may or may not be part of"},{"line_number":395,"context_line":"               Storage collection)."},{"line_number":396,"context_line":"            7. Follow steps 2 to 6 for each member of Storage collection."},{"line_number":397,"context_line":"        \"\"\""},{"line_number":398,"context_line":"        size \u003d 0"},{"line_number":399,"context_line":"        volume_members \u003d self.volume"},{"line_number":400,"context_line":"        if volume_members:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_f98f6820","line":397,"range":{"start_line":397,"start_character":8,"end_line":397,"end_character":11},"updated":"2018-04-11 09:46:57.000000000","message":"nit: should we document :returns: and the units?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":395,"context_line":"               Storage collection)."},{"line_number":396,"context_line":"            7. Follow steps 2 to 6 for each member of Storage collection."},{"line_number":397,"context_line":"        \"\"\""},{"line_number":398,"context_line":"        size \u003d 0"},{"line_number":399,"context_line":"        volume_members \u003d self.volume"},{"line_number":400,"context_line":"        if volume_members:"},{"line_number":401,"context_line":"            size \u003d self.volume.size"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_59c3f457","line":398,"range":{"start_line":398,"start_character":8,"end_line":398,"end_character":12},"updated":"2018-04-11 09:46:57.000000000","message":"nit: you can perhaps move this assignment to line 403","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"300d6a6570121accae52b58c57742997d1482947","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        \u0027\u003c/redfish/v1/Chassis/\u003cchassis_id\u003e/Drives/\u003cDrive_type\u003e/\u0027"},{"line_number":435,"context_line":"        gives no data and is invalid URI."},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        \"\"\""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        size \u003d 0"},{"line_number":440,"context_line":"        for drive_mem in drives_list:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bf659307_19bedcb3","line":437,"range":{"start_line":437,"start_character":8,"end_line":437,"end_character":11},"updated":"2018-04-11 09:46:57.000000000","message":"nit: newline\nnit: should we document :returns: and the units?","commit_id":"a25bf820a49de1dba903a382cd310ea25d38a4a4"}],"sushy/resources/system/volumes.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    this volume.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, connector, identity, redfish_version\u003dNone):"},{"line_number":55,"context_line":"        \"\"\"A class representing a Volumes"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        :param connector: A Connector instance"},{"line_number":58,"context_line":"        :param identity: The identity of the Volumes resource"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_ee1dfdbd","line":55,"updated":"2017-04-24 06:39:02.000000000","message":"It\u0027s not quite clear what \"A volumes\" is (it\u0027s not even grammatically correct). A volume? A collection of volumes?","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            self.state \u003d status.get(\u0027State\u0027)"},{"line_number":72,"context_line":"            self.health \u003d status.get(\u0027Health\u0027)"},{"line_number":73,"context_line":"        self.encrypted \u003d self.json.get(\u0027Encrypted\u0027)"},{"line_number":74,"context_line":"        self.volumetype \u003d self.json.get(\u0027VolumeType\u0027)"},{"line_number":75,"context_line":"        self.capacitybytes \u003d self.json.get(\u0027CapacityBytes\u0027)"},{"line_number":76,"context_line":"        links \u003d self.json.get(\u0027links\u0027)"},{"line_number":77,"context_line":"        if links is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_ce7801fa","line":74,"updated":"2017-04-24 06:39:02.000000000","message":"volume_type","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b4a6fc76b985a4a48dbff55a0e904c5e16f76e47","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.health \u003d status.get(\u0027Health\u0027)"},{"line_number":73,"context_line":"        self.encrypted \u003d self.json.get(\u0027Encrypted\u0027)"},{"line_number":74,"context_line":"        self.volumetype \u003d self.json.get(\u0027VolumeType\u0027)"},{"line_number":75,"context_line":"        self.capacitybytes \u003d self.json.get(\u0027CapacityBytes\u0027)"},{"line_number":76,"context_line":"        links \u003d self.json.get(\u0027links\u0027)"},{"line_number":77,"context_line":"        if links is not None:"},{"line_number":78,"context_line":"            self.drives_list \u003d links.get(\u0027Drives\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_ae7db5e8","line":75,"updated":"2017-04-24 06:39:02.000000000","message":"capacity_bytes","commit_id":"7be3e5bf2dcfbfedc87ce4c63930a61ad6dab527"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_42017e69","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"same","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    health \u003d base.Field(\u0027Health\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Volumes(base.ResourceBase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    identity \u003d base.Field(\u0027Id\u0027, required\u003dTrue)"},{"line_number":30,"context_line":"    \"\"\"The processor identity string\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_8d6aeb7d","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":13},"updated":"2017-06-30 10:29:26.000000000","message":"s/Volumes/Volume","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                      redfish_version)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class VolumesCollection(base.ResourceCollectionBase):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def _resource_type(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_0d149bf4","line":67,"range":{"start_line":67,"start_character":6,"end_line":67,"end_character":23},"updated":"2017-06-30 10:29:26.000000000","message":"s/VolumesCollection/VolumeCollection - to be consistent","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7601a5a0d46ac47cca56b0883f9a48d5a2d95c0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    encrypted \u003d base.Field(\u0027Encrypted\u0027)"},{"line_number":37,"context_line":"    \"\"\"Is this Volume encrypted\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    capacitybytes \u003d base.Field(\u0027CapacityBytes\u0027)"},{"line_number":40,"context_line":"    \"\"\"The size in bytes of this Volume\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    volumetype \u003d base.Field(\u0027VolumeType\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_6393375e","line":39,"updated":"2017-07-08 20:20:25.000000000","message":"\"capacity_bytes\"","commit_id":"b5f244f67aa339485592a3f1f150bfbaa4fe3515"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c7601a5a0d46ac47cca56b0883f9a48d5a2d95c0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    capacitybytes \u003d base.Field(\u0027CapacityBytes\u0027)"},{"line_number":40,"context_line":"    \"\"\"The size in bytes of this Volume\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    volumetype \u003d base.Field(\u0027VolumeType\u0027)"},{"line_number":43,"context_line":"    \"\"\"The type of this volume.\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    drives_list \u003d base.Field(\u0027Drives\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_43903b4f","line":42,"updated":"2017-07-08 20:20:25.000000000","message":"\"volume_type\"","commit_id":"b5f244f67aa339485592a3f1f150bfbaa4fe3515"}],"sushy/tests/unit/json_samples/drive1.json":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\t\"CapacityBytes\": 899527000000,"},{"line_number":11,"context_line":"\t\"FailurePredicted\": false,"},{"line_number":12,"context_line":"\t\"Protocol\": \"SAS\","},{"line_number":13,"context_line":"\t\"MediaType\": \"HDD\","},{"line_number":14,"context_line":"\t\"Manufacturer\": \"Contoso\","},{"line_number":15,"context_line":"\t\"SerialNumber\": \"1234567\","},{"line_number":16,"context_line":"\t\"PartNumber\": \"C123-1111\","}],"source_content_type":"application/json","patch_set":8,"id":"5f201791_bf52ad33","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":1},"updated":"2017-06-28 13:53:51.000000000","message":"Tabs instead of spaces in the other sample json documents.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/json_samples/drive1_collection.json":[{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"@odata.type\": \"#DrivesCollection.DrivesCollection\","},{"line_number":3,"context_line":"\t\"Name\": \"Drives Collection\","},{"line_number":4,"context_line":"\t\"Members@odata.count\": 1,"}],"source_content_type":"application/json","patch_set":8,"id":"3f1d235d_ad1b6719","line":1,"updated":"2017-06-30 10:29:26.000000000","message":"nit: s/drive1_collection/drive_collection","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\t\"Name\": \"Drives Collection\","},{"line_number":4,"context_line":"\t\"Members@odata.count\": 1,"},{"line_number":5,"context_line":"\t\"Members\": [{"},{"line_number":6,"context_line":"\t\t\"@odata.id\": \"/redfish/v1/Systems/437XR1138R2/Storage/1/Drives/3F5A8C54207B7233\""},{"line_number":7,"context_line":"\t}],"},{"line_number":8,"context_line":"\t\"@odata.context\": \"/redfish/v1/$metadata#DriveCollection.DriveCollection\","},{"line_number":9,"context_line":"\t\"@odata.id\": \"/redfish/v1/Systems/437XR1138R2/Storage/1/Drives\""}],"source_content_type":"application/json","patch_set":8,"id":"5f201791_1f108156","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":1},"updated":"2017-06-28 13:53:51.000000000","message":"s/tabs/spaces/","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/json_samples/simplestorage.json":[{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\t\t\"Name\": \"SATA Bay 1\","},{"line_number":14,"context_line":"\t\t\"Manufacturer\": \"Contoso\","},{"line_number":15,"context_line":"\t\t\"Model\": \"3000GT8\","},{"line_number":16,"context_line":"\t\t\"CapacityBytes\": 8000000000000,"},{"line_number":17,"context_line":"\t\t\"Status\": {"},{"line_number":18,"context_line":"\t\t\t\"State\": \"Enabled\","},{"line_number":19,"context_line":"\t\t\t\"Health\": \"OK\""}],"source_content_type":"application/json","patch_set":8,"id":"3f1d235d_0db01bf4","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":16},"updated":"2017-06-30 10:29:26.000000000","message":"do we add these 2 CapacityBytes in 2 devices to get the total size in case SimpleStorage is available (and we ignore rest all like Storage etc.)?","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/json_samples/storage1.json":[{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"@odata.type\": \"#Storage.v1_1_0.Storage\","},{"line_number":3,"context_line":"\t\"Id\": \"1\","},{"line_number":4,"context_line":"\t\"Name\": \"Local Storage Controller\","}],"source_content_type":"application/json","patch_set":8,"id":"3f1d235d_6d8f8f23","line":1,"updated":"2017-06-30 10:29:26.000000000","message":"nit: s/storage1.json/storage.json","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/json_samples/storage1_collection.json":[{"author":{"_account_id":16635,"name":"deray","email":"debayan.ray@gmail.com","username":"deray"},"change_message_id":"3ddf68046a21004feaf0ca7580d0c3b3aee3224b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"@odata.type\": \"#StorageCollection.StorageCollection\","},{"line_number":3,"context_line":"\t\"Name\": \"Storage Collection\","},{"line_number":4,"context_line":"\t\"Members@odata.count\": 1,"}],"source_content_type":"application/json","patch_set":8,"id":"3f1d235d_eda27f9a","line":1,"updated":"2017-06-30 10:29:26.000000000","message":"nit: s/storage1_collection.json/storage_collection.json","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/resources/system/test_simplestorage.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":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_a22df2fe","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"same","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/resources/system/test_storage.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":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_22fc426e","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"same.","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}],"sushy/tests/unit/resources/system/test_volumes.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":"a8d3e340b023be4d5463936d66b6fda8335836bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":8,"id":"5f201791_2241e2a9","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2017-06-28 13:53:51.000000000","message":"same. Wherever the header is being copied from, can we get that file fixed?","commit_id":"bc47ae0acea5701102966a01e55890ca0eb24b66"}]}
