)]}'
{"glanceclient/tests/unit/v2/test_shell_v2.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"49835d05097cb1ec52714181c4beca25850ad471","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"        mock_utils_exit.side_effect \u003d self._mock_utils_exit"},{"line_number":1105,"context_line":"        args \u003d self._make_args("},{"line_number":1106,"context_line":"            {\u0027id\u0027: \u0027IMG-01\u0027, \u0027import_method\u0027: \u0027web-download\u0027,"},{"line_number":1107,"context_line":"             \u0027uri\u0027: \u0027http://joes-image-shack.com/funky.qcow2\u0027})"},{"line_number":1108,"context_line":"        with mock.patch.object(self.gc.images,"},{"line_number":1109,"context_line":"                               \u0027get_import_info\u0027) as mocked_info:"},{"line_number":1110,"context_line":"            with mock.patch.object(self.gc.images, \u0027get\u0027) as mocked_get:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_d3a0f144","line":1107,"range":{"start_line":1107,"start_character":28,"end_line":1107,"end_character":48},"updated":"2018-04-03 13:03:20.000000000","message":"NIT: Same here, please lets use the example.com for consistency.","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7e66f0574ce2fb24632270a054ea8e5608e58668","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"        mock_utils_exit.side_effect \u003d self._mock_utils_exit"},{"line_number":1105,"context_line":"        args \u003d self._make_args("},{"line_number":1106,"context_line":"            {\u0027id\u0027: \u0027IMG-01\u0027, \u0027import_method\u0027: \u0027web-download\u0027,"},{"line_number":1107,"context_line":"             \u0027uri\u0027: \u0027http://joes-image-shack.com/funky.qcow2\u0027})"},{"line_number":1108,"context_line":"        with mock.patch.object(self.gc.images,"},{"line_number":1109,"context_line":"                               \u0027get_import_info\u0027) as mocked_info:"},{"line_number":1110,"context_line":"            with mock.patch.object(self.gc.images, \u0027get\u0027) as mocked_get:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_12a50047","line":1107,"range":{"start_line":1107,"start_character":28,"end_line":1107,"end_character":48},"in_reply_to":"bf659307_d3a0f144","updated":"2018-04-03 15:21:32.000000000","message":"Will fix these.","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"49835d05097cb1ec52714181c4beca25850ad471","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"        mock_utils_exit.side_effect \u003d self._mock_utils_exit"},{"line_number":1129,"context_line":"        args \u003d self._make_args("},{"line_number":1130,"context_line":"            {\u0027id\u0027: \u0027IMG-01\u0027, \u0027import_method\u0027: \u0027web-download\u0027,"},{"line_number":1131,"context_line":"             \u0027uri\u0027: \u0027http://joes-image-shack.com/funky.qcow2\u0027})"},{"line_number":1132,"context_line":"        with mock.patch.object(self.gc.images,"},{"line_number":1133,"context_line":"                               \u0027get_import_info\u0027) as mocked_info:"},{"line_number":1134,"context_line":"            with mock.patch.object(self.gc.images, \u0027get\u0027) as mocked_get:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_738b25c2","line":1131,"range":{"start_line":1131,"start_character":28,"end_line":1131,"end_character":48},"updated":"2018-04-03 13:03:20.000000000","message":"ditto","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"49835d05097cb1ec52714181c4beca25850ad471","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        mock_utils_exit.side_effect \u003d self._mock_utils_exit"},{"line_number":1152,"context_line":"        args \u003d self._make_args("},{"line_number":1153,"context_line":"            {\u0027id\u0027: \u0027IMG-01\u0027, \u0027import_method\u0027: \u0027web-download\u0027,"},{"line_number":1154,"context_line":"             \u0027uri\u0027: \u0027http://joes-image-shack.com/funky.qcow2\u0027})"},{"line_number":1155,"context_line":"        with mock.patch.object(self.gc.images,"},{"line_number":1156,"context_line":"                               \u0027get_import_info\u0027) as mocked_info:"},{"line_number":1157,"context_line":"            with mock.patch.object(self.gc.images, \u0027get\u0027) as mocked_get:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_9386f9b8","line":1154,"range":{"start_line":1154,"start_character":28,"end_line":1154,"end_character":48},"updated":"2018-04-03 13:03:20.000000000","message":"ditto","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"}],"glanceclient/v2/shell.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"4e747a2318e0e3c48da77594daffd60a75712080","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        utils.exit(\"Import method should be \u0027web-download\u0027 if URI is \""},{"line_number":483,"context_line":"                   \"provided.\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    image \u003d gc.images.get(args.id)"},{"line_number":486,"context_line":"    container_format \u003d image.get(\u0027container_format\u0027)"},{"line_number":487,"context_line":"    disk_format \u003d image.get(\u0027disk_format\u0027)"},{"line_number":488,"context_line":"    if not (container_format and disk_format):"},{"line_number":489,"context_line":"        utils.exit(\"The \u0027container_format\u0027 and \u0027disk_format\u0027 properties \""},{"line_number":490,"context_line":"                   \"must be set on an image before it can be imported.\")"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    image_status \u003d image.get(\u0027status\u0027)"},{"line_number":493,"context_line":"    if args.import_method \u003d\u003d \u0027glance-direct\u0027:"},{"line_number":494,"context_line":"        if image_status !\u003d \u0027uploading\u0027:"},{"line_number":495,"context_line":"            utils.exit(\"The \u0027glance-direct\u0027 import method can only be applied \""},{"line_number":496,"context_line":"                       \"to an image in status \u0027uploading\u0027\")"},{"line_number":497,"context_line":"    if args.import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":498,"context_line":"        if image_status !\u003d \u0027queued\u0027:"},{"line_number":499,"context_line":"            utils.exit(\"The \u0027web-download\u0027 import method can only be applied \""},{"line_number":500,"context_line":"                       \"to an image in status \u0027queued\u0027\")"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_a03a73e4","line":500,"range":{"start_line":485,"start_character":0,"end_line":500,"end_character":56},"updated":"2018-03-26 14:10:37.000000000","message":"I\u0027m not convinced this is any faster failing than issuing the import request as we need to make the image get request to the server anyways. And any of these cases would fail the import call equally.\n\nQuite opposite for any successful call we add one extra request to the glance API that is not really needed increasing the load and delaying the operation.\n\nIn my understanding the \"Fail fast\" principle we have been following for glanceclient is to block any calls to server that would require processing and we know would fail purely analyzing the user input without making the request to the server in the first place.\n\nWe don\u0027t provide sufficient information why the import call failed from the server side?","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"87ba958f02e5656dcc52800243be4c9124aaa6c4","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        utils.exit(\"Import method should be \u0027web-download\u0027 if URI is \""},{"line_number":483,"context_line":"                   \"provided.\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    image \u003d gc.images.get(args.id)"},{"line_number":486,"context_line":"    container_format \u003d image.get(\u0027container_format\u0027)"},{"line_number":487,"context_line":"    disk_format \u003d image.get(\u0027disk_format\u0027)"},{"line_number":488,"context_line":"    if not (container_format and disk_format):"},{"line_number":489,"context_line":"        utils.exit(\"The \u0027container_format\u0027 and \u0027disk_format\u0027 properties \""},{"line_number":490,"context_line":"                   \"must be set on an image before it can be imported.\")"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    image_status \u003d image.get(\u0027status\u0027)"},{"line_number":493,"context_line":"    if args.import_method \u003d\u003d \u0027glance-direct\u0027:"},{"line_number":494,"context_line":"        if image_status !\u003d \u0027uploading\u0027:"},{"line_number":495,"context_line":"            utils.exit(\"The \u0027glance-direct\u0027 import method can only be applied \""},{"line_number":496,"context_line":"                       \"to an image in status \u0027uploading\u0027\")"},{"line_number":497,"context_line":"    if args.import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":498,"context_line":"        if image_status !\u003d \u0027queued\u0027:"},{"line_number":499,"context_line":"            utils.exit(\"The \u0027web-download\u0027 import method can only be applied \""},{"line_number":500,"context_line":"                       \"to an image in status \u0027queued\u0027\")"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_a99b3f70","line":500,"range":{"start_line":485,"start_character":0,"end_line":500,"end_character":56},"in_reply_to":"bf659307_09a58b04","updated":"2018-03-26 14:56:31.000000000","message":"This is indeed the case, we do puke just InvalidImageStatusTransition exception from the tasks but that indeed happens after the task is created. Something we clearly should fix in the API end to avoid just dumping tons and tons of doomed to fail tasks.","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"edac664755c9a1356425df83955a1d27dfa86551","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        utils.exit(\"Import method should be \u0027web-download\u0027 if URI is \""},{"line_number":483,"context_line":"                   \"provided.\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    image \u003d gc.images.get(args.id)"},{"line_number":486,"context_line":"    container_format \u003d image.get(\u0027container_format\u0027)"},{"line_number":487,"context_line":"    disk_format \u003d image.get(\u0027disk_format\u0027)"},{"line_number":488,"context_line":"    if not (container_format and disk_format):"},{"line_number":489,"context_line":"        utils.exit(\"The \u0027container_format\u0027 and \u0027disk_format\u0027 properties \""},{"line_number":490,"context_line":"                   \"must be set on an image before it can be imported.\")"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    image_status \u003d image.get(\u0027status\u0027)"},{"line_number":493,"context_line":"    if args.import_method \u003d\u003d \u0027glance-direct\u0027:"},{"line_number":494,"context_line":"        if image_status !\u003d \u0027uploading\u0027:"},{"line_number":495,"context_line":"            utils.exit(\"The \u0027glance-direct\u0027 import method can only be applied \""},{"line_number":496,"context_line":"                       \"to an image in status \u0027uploading\u0027\")"},{"line_number":497,"context_line":"    if args.import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":498,"context_line":"        if image_status !\u003d \u0027queued\u0027:"},{"line_number":499,"context_line":"            utils.exit(\"The \u0027web-download\u0027 import method can only be applied \""},{"line_number":500,"context_line":"                       \"to an image in status \u0027queued\u0027\")"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_09a58b04","line":500,"range":{"start_line":485,"start_character":0,"end_line":500,"end_character":56},"in_reply_to":"bf659307_a03a73e4","updated":"2018-03-26 14:45:22.000000000","message":"I\u0027m pretty sure the status change checks don\u0027t happen on the server side until the import task has been created.  So the import call succeeds at the API, but the image is not actually imported (image stays in \u0027queued\u0027 or \u0027uploading\u0027 and the task goes to failure status.  Currently there\u0027s no way for a user to find out what has happened, since Tasks API access is denied by default.","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"eb98c10dd9303cb789f80714e0b07e4398f533e9","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        utils.exit(\"Import method should be \u0027web-download\u0027 if URI is \""},{"line_number":483,"context_line":"                   \"provided.\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    image \u003d gc.images.get(args.id)"},{"line_number":486,"context_line":"    container_format \u003d image.get(\u0027container_format\u0027)"},{"line_number":487,"context_line":"    disk_format \u003d image.get(\u0027disk_format\u0027)"},{"line_number":488,"context_line":"    if not (container_format and disk_format):"},{"line_number":489,"context_line":"        utils.exit(\"The \u0027container_format\u0027 and \u0027disk_format\u0027 properties \""},{"line_number":490,"context_line":"                   \"must be set on an image before it can be imported.\")"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    image_status \u003d image.get(\u0027status\u0027)"},{"line_number":493,"context_line":"    if args.import_method \u003d\u003d \u0027glance-direct\u0027:"},{"line_number":494,"context_line":"        if image_status !\u003d \u0027uploading\u0027:"},{"line_number":495,"context_line":"            utils.exit(\"The \u0027glance-direct\u0027 import method can only be applied \""},{"line_number":496,"context_line":"                       \"to an image in status \u0027uploading\u0027\")"},{"line_number":497,"context_line":"    if args.import_method \u003d\u003d \u0027web-download\u0027:"},{"line_number":498,"context_line":"        if image_status !\u003d \u0027queued\u0027:"},{"line_number":499,"context_line":"            utils.exit(\"The \u0027web-download\u0027 import method can only be applied \""},{"line_number":500,"context_line":"                       \"to an image in status \u0027queued\u0027\")"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_2cf89de3","line":500,"range":{"start_line":485,"start_character":0,"end_line":500,"end_character":56},"in_reply_to":"bf659307_a99b3f70","updated":"2018-03-26 15:10:17.000000000","message":"I agree, though it\u0027s too late to fix this in Queens.","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"4e747a2318e0e3c48da77594daffd60a75712080","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"},{"line_number":504,"context_line":"    except exc.HTTPNotFound:"},{"line_number":505,"context_line":"        utils.exit(\u0027Target Glance does not support Image Import workflow\u0027)"},{"line_number":506,"context_line":"    else:"},{"line_number":507,"context_line":"        if not getattr(args, \u0027from_create\u0027, False):"},{"line_number":508,"context_line":"            image \u003d gc.images.get(args.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_60f9bb7e","line":505,"range":{"start_line":504,"start_character":0,"end_line":505,"end_character":74},"updated":"2018-03-26 14:10:37.000000000","message":"Can you give an example how this is still reached?","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"edac664755c9a1356425df83955a1d27dfa86551","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    try:"},{"line_number":503,"context_line":"        gc.images.image_import(args.id, args.import_method, args.uri)"},{"line_number":504,"context_line":"    except exc.HTTPNotFound:"},{"line_number":505,"context_line":"        utils.exit(\u0027Target Glance does not support Image Import workflow\u0027)"},{"line_number":506,"context_line":"    else:"},{"line_number":507,"context_line":"        if not getattr(args, \u0027from_create\u0027, False):"},{"line_number":508,"context_line":"            image \u003d gc.images.get(args.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_697be78b","line":505,"range":{"start_line":504,"start_character":0,"end_line":505,"end_character":74},"in_reply_to":"bf659307_60f9bb7e","updated":"2018-03-26 14:45:22.000000000","message":"I guess if the config was reloaded on the server?  Actually, I just forgot to change this after I moved the check to the top.","commit_id":"038d212db4704f9094b4adba9ca395a31cc3f9ac"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"49835d05097cb1ec52714181c4beca25850ad471","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    \"\"\"Initiate the image import taskflow.\"\"\""},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    try:"},{"line_number":470,"context_line":"        import_methods \u003d gc.images.get_import_info().get(\u0027import-methods\u0027)"},{"line_number":471,"context_line":"    except exc.HTTPNotFound:"},{"line_number":472,"context_line":"        utils.exit(\u0027Target Glance does not support Image Import workflow\u0027)"},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_53538139","line":470,"updated":"2018-04-03 13:03:20.000000000","message":"I\u0027m still not convinced about this, specially if we get here from the create-image-via-import we are doing this call again and adding yet another request to the api and this time (after we have merged the create via import call change) 100% redundant. Perhaps we should condition these checks only if the \u0027from_create\u0027 is False?","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7e66f0574ce2fb24632270a054ea8e5608e58668","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    \"\"\"Initiate the image import taskflow.\"\"\""},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    try:"},{"line_number":470,"context_line":"        import_methods \u003d gc.images.get_import_info().get(\u0027import-methods\u0027)"},{"line_number":471,"context_line":"    except exc.HTTPNotFound:"},{"line_number":472,"context_line":"        utils.exit(\u0027Target Glance does not support Image Import workflow\u0027)"},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_328b64c3","line":470,"in_reply_to":"bf659307_53538139","updated":"2018-04-03 15:21:32.000000000","message":"You\u0027re right, as long as we\u0027ve got \u0027from_create\u0027 to indicate that this function is being called as part of a larger workflow, we might as well use it.","commit_id":"8fdac8b92c668e12273ad326c6f44981abdf7d7a"}]}
