)]}'
{"cinder/utils.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5e176695a40b23ef4b3be3e70e6a34da73b2b358","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    return obj"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def check_exclusive_options(**kwargs: Optional[Union[dict, str]]) -\u003e None:"},{"line_number":137,"context_line":"    \"\"\"Checks that only one of the provided options is actually not-none."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    Iterates over all the kwargs passed in and checks that only one of said"}],"source_content_type":"text/x-python","patch_set":13,"id":"8f72b175_2818616f","line":136,"range":{"start_line":136,"start_character":38,"end_line":136,"end_character":64},"updated":"2021-08-09 22:12:53.000000000","message":"I\u0027m having trouble understanding this one.  I guess you want \u0027Optional\u0027 up front because any of the keyword args could have the value None (since some of the args being passed are declared as \u0027Optional[dict]\u0027).\n\nIf we did \u0027Union[Optional[dict], str]]\u0027 (which does seem to work), it would be misleading (maybe) because imageRef could be None, but that would be because of the \u0027Optional[dict]\u0027 part even though imageRef should be a string (because the argument that loads it is of type str).\n\nIn any case, I think you need to add bool to the Union in case someone passes \u0027pretty_keys\u0027 (see line 147).  So I guess this should be:\n\n  Optional[Union[dict, str, bool]]","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fdd1850e790cb46ea95b9dfd106b82557f50438","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    return obj"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def check_exclusive_options(**kwargs: Optional[Union[dict, str]]) -\u003e None:"},{"line_number":137,"context_line":"    \"\"\"Checks that only one of the provided options is actually not-none."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    Iterates over all the kwargs passed in and checks that only one of said"}],"source_content_type":"text/x-python","patch_set":13,"id":"209f1d96_a2504dab","line":136,"range":{"start_line":136,"start_character":38,"end_line":136,"end_character":64},"in_reply_to":"8f72b175_2818616f","updated":"2021-08-10 14:09:23.000000000","message":"Done","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5e176695a40b23ef4b3be3e70e6a34da73b2b358","unresolved":true,"context_lines":[{"line_number":430,"context_line":"                context: context.RequestContext,"},{"line_number":431,"context_line":"                size: int,"},{"line_number":432,"context_line":"                snapshot: Optional[dict],"},{"line_number":433,"context_line":"                image_id: str,"},{"line_number":434,"context_line":"                source_volume: Optional[dict],"},{"line_number":435,"context_line":"                availability_zone: Optional[str],"},{"line_number":436,"context_line":"                volume_type,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7905fa18_aa81b73b","line":433,"range":{"start_line":433,"start_character":26,"end_line":433,"end_character":29},"updated":"2021-08-09 22:12:53.000000000","message":"should this be Optional[str]?  (It gets used as an argument at line 463 to a function where it\u0027s typed as Optional[str] (line 235), and in general, I don\u0027t think it\u0027s required to have a value.)","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fdd1850e790cb46ea95b9dfd106b82557f50438","unresolved":true,"context_lines":[{"line_number":430,"context_line":"                context: context.RequestContext,"},{"line_number":431,"context_line":"                size: int,"},{"line_number":432,"context_line":"                snapshot: Optional[dict],"},{"line_number":433,"context_line":"                image_id: str,"},{"line_number":434,"context_line":"                source_volume: Optional[dict],"},{"line_number":435,"context_line":"                availability_zone: Optional[str],"},{"line_number":436,"context_line":"                volume_type,"}],"source_content_type":"text/x-python","patch_set":13,"id":"a92111d7_a3597383","line":433,"range":{"start_line":433,"start_character":26,"end_line":433,"end_character":29},"in_reply_to":"7905fa18_aa81b73b","updated":"2021-08-10 14:09:23.000000000","message":"Yes, should be Optional.","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"}],"cinder/volume/manager.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5e176695a40b23ef4b3be3e70e6a34da73b2b358","unresolved":true,"context_lines":[{"line_number":875,"context_line":"                      context: context.RequestContext,"},{"line_number":876,"context_line":"                      volume: objects.volume.Volume,"},{"line_number":877,"context_line":"                      unmanage_only\u003dFalse,"},{"line_number":878,"context_line":"                      cascade\u003dFalse):"},{"line_number":879,"context_line":"        \"\"\"Deletes and unexports volume."},{"line_number":880,"context_line":""},{"line_number":881,"context_line":"        1. Delete a volume(normal case)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a05c7c31_f294178b","line":878,"updated":"2021-08-09 22:12:53.000000000","message":"line 980 from change Ic73ee64257aeb02 is the culprit here","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fdd1850e790cb46ea95b9dfd106b82557f50438","unresolved":true,"context_lines":[{"line_number":875,"context_line":"                      context: context.RequestContext,"},{"line_number":876,"context_line":"                      volume: objects.volume.Volume,"},{"line_number":877,"context_line":"                      unmanage_only\u003dFalse,"},{"line_number":878,"context_line":"                      cascade\u003dFalse):"},{"line_number":879,"context_line":"        \"\"\"Deletes and unexports volume."},{"line_number":880,"context_line":""},{"line_number":881,"context_line":"        1. Delete a volume(normal case)"}],"source_content_type":"text/x-python","patch_set":13,"id":"d86bb41b_e55d90fc","line":878,"in_reply_to":"a05c7c31_f294178b","updated":"2021-08-10 14:09:23.000000000","message":"This is handled in\n    https://review.opendev.org/c/openstack/cinder/+/784453/","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5e176695a40b23ef4b3be3e70e6a34da73b2b358","unresolved":true,"context_lines":[{"line_number":1277,"context_line":"                        context: context.RequestContext,"},{"line_number":1278,"context_line":"                        snapshot: objects.Snapshot,"},{"line_number":1279,"context_line":"                        unmanage_only: bool \u003d False,"},{"line_number":1280,"context_line":"                        handle_quota: bool \u003d True):"},{"line_number":1281,"context_line":"        \"\"\"Deletes and unexports snapshot.\"\"\""},{"line_number":1282,"context_line":"        context \u003d context.elevated()"},{"line_number":1283,"context_line":"        snapshot._context \u003d context"}],"source_content_type":"text/x-python","patch_set":13,"id":"8dbcd4f4_a3018273","line":1280,"updated":"2021-08-09 22:12:53.000000000","message":"line 1312 for this one","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fdd1850e790cb46ea95b9dfd106b82557f50438","unresolved":true,"context_lines":[{"line_number":1277,"context_line":"                        context: context.RequestContext,"},{"line_number":1278,"context_line":"                        snapshot: objects.Snapshot,"},{"line_number":1279,"context_line":"                        unmanage_only: bool \u003d False,"},{"line_number":1280,"context_line":"                        handle_quota: bool \u003d True):"},{"line_number":1281,"context_line":"        \"\"\"Deletes and unexports snapshot.\"\"\""},{"line_number":1282,"context_line":"        context \u003d context.elevated()"},{"line_number":1283,"context_line":"        snapshot._context \u003d context"}],"source_content_type":"text/x-python","patch_set":13,"id":"c953bb10_f958009a","line":1280,"in_reply_to":"8dbcd4f4_a3018273","updated":"2021-08-10 14:09:23.000000000","message":"This is handled in\n    https://review.opendev.org/c/openstack/cinder/+/784453/","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"}],"cinder/volume/volume_utils.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5e176695a40b23ef4b3be3e70e6a34da73b2b358","unresolved":true,"context_lines":[{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"    if typing.TYPE_CHECKING:"},{"line_number":1030,"context_line":"        typing.cast(str, encryption_key_id)"},{"line_number":1031,"context_line":"        assert encryption_key_id is not None"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    return encryption_key_id"},{"line_number":1034,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"8805ce24_61abf305","line":1031,"updated":"2021-08-09 22:12:53.000000000","message":"I don\u0027t understand this change.  The typing.cast() without the conditional or assertion works for me locally (though maybe it causes a problem later in one of the dependent patches)?","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9fdd1850e790cb46ea95b9dfd106b82557f50438","unresolved":true,"context_lines":[{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"    if typing.TYPE_CHECKING:"},{"line_number":1030,"context_line":"        typing.cast(str, encryption_key_id)"},{"line_number":1031,"context_line":"        assert encryption_key_id is not None"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    return encryption_key_id"},{"line_number":1034,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"a9baba0d_dff9aa76","line":1031,"in_reply_to":"8805ce24_61abf305","updated":"2021-08-10 14:09:23.000000000","message":"Yeah, this should just be typing.cast().","commit_id":"960b4f59438554fb29cb7cf4661eaf895525236e"}]}
