)]}'
{"cinder/api/openstack/wsgi.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"473219381a0cdf701a553a82c61faee0c2c0778a","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# TODO(smcginnis) update this once six has support for collections.abc"},{"line_number":18,"context_line":"# (https://github.com/benjaminp/six/pull/241) or clean up once we drop py2.7."},{"line_number":19,"context_line":"try:"},{"line_number":20,"context_line":"    from collections.abc import Callable"},{"line_number":21,"context_line":"except ImportError:"},{"line_number":22,"context_line":"    from collections import Callable"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import functools"},{"line_number":25,"context_line":"import inspect"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_65af0f7d","line":22,"range":{"start_line":19,"start_character":0,"end_line":22,"end_character":36},"updated":"2019-05-14 20:03:59.000000000","message":"We could use the generic importing like you did on manage.py for all files instead of importing the classes by the name. It would be few less lines","commit_id":"920a87866b3a9b41b2808142aece4705d9939266"}],"cinder/cmd/manage.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"5dd594af445eaadf2b36683f2def3f077dc95a27","unresolved":false,"context_lines":[{"line_number":782,"context_line":"    result \u003d []"},{"line_number":783,"context_line":"    for i in dir(obj):"},{"line_number":784,"context_line":"        if isinstance(getattr(obj, i),"},{"line_number":785,"context_line":"                      collections.Callable) and not i.startswith(\u0027_\u0027):"},{"line_number":786,"context_line":"            result.append((i, getattr(obj, i)))"},{"line_number":787,"context_line":"    return result"},{"line_number":788,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_a24dfd9a","line":785,"range":{"start_line":785,"start_character":22,"end_line":785,"end_character":42},"updated":"2019-05-14 19:16:55.000000000","message":"Same here and some other locations if you grep \u0027collections\u0027","commit_id":"ba2f03bdc8adc4e9dd09445543f33e8859f784fc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1428b9821f052869defbd1d8f4c50a7cca99a290","unresolved":false,"context_lines":[{"line_number":782,"context_line":"    result \u003d []"},{"line_number":783,"context_line":"    for i in dir(obj):"},{"line_number":784,"context_line":"        if isinstance(getattr(obj, i),"},{"line_number":785,"context_line":"                      collections.Callable) and not i.startswith(\u0027_\u0027):"},{"line_number":786,"context_line":"            result.append((i, getattr(obj, i)))"},{"line_number":787,"context_line":"    return result"},{"line_number":788,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_c52efb90","line":785,"range":{"start_line":785,"start_character":22,"end_line":785,"end_character":42},"in_reply_to":"dfbec78f_a24dfd9a","updated":"2019-05-14 19:30:30.000000000","message":"Not every collection class is an abc class.","commit_id":"ba2f03bdc8adc4e9dd09445543f33e8859f784fc"}],"cinder/objects/cleanable.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"5dd594af445eaadf2b36683f2def3f077dc95a27","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # If we don\u0027t have optional decorator arguments the argument in"},{"line_number":227,"context_line":"        # decorator_args is the function we have to decorate"},{"line_number":228,"context_line":"        if len(decorator_args) \u003d\u003d 1 and isinstance("},{"line_number":229,"context_line":"                decorator_args[0], collections.Callable):"},{"line_number":230,"context_line":"            function \u003d decorator_args[0]"},{"line_number":231,"context_line":"            decorator_args \u003d None"},{"line_number":232,"context_line":"            return _decorator(function)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_22782dc2","line":229,"range":{"start_line":229,"start_character":47,"end_line":229,"end_character":55},"updated":"2019-05-14 19:16:55.000000000","message":"Any reason why this was not changed?","commit_id":"ba2f03bdc8adc4e9dd09445543f33e8859f784fc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1428b9821f052869defbd1d8f4c50a7cca99a290","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # If we don\u0027t have optional decorator arguments the argument in"},{"line_number":227,"context_line":"        # decorator_args is the function we have to decorate"},{"line_number":228,"context_line":"        if len(decorator_args) \u003d\u003d 1 and isinstance("},{"line_number":229,"context_line":"                decorator_args[0], collections.Callable):"},{"line_number":230,"context_line":"            function \u003d decorator_args[0]"},{"line_number":231,"context_line":"            decorator_args \u003d None"},{"line_number":232,"context_line":"            return _decorator(function)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_e519bf79","line":229,"range":{"start_line":229,"start_character":47,"end_line":229,"end_character":55},"in_reply_to":"dfbec78f_22782dc2","updated":"2019-05-14 19:30:30.000000000","message":"It\u0027s not one of the ABC classes.","commit_id":"ba2f03bdc8adc4e9dd09445543f33e8859f784fc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6a52f0d0322f63740663f6c773bdaaa9716d007f","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        # If we don\u0027t have optional decorator arguments the argument in"},{"line_number":227,"context_line":"        # decorator_args is the function we have to decorate"},{"line_number":228,"context_line":"        if len(decorator_args) \u003d\u003d 1 and isinstance("},{"line_number":229,"context_line":"                decorator_args[0], collections.Callable):"},{"line_number":230,"context_line":"            function \u003d decorator_args[0]"},{"line_number":231,"context_line":"            decorator_args \u003d None"},{"line_number":232,"context_line":"            return _decorator(function)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_25b03743","line":229,"range":{"start_line":229,"start_character":47,"end_line":229,"end_character":55},"in_reply_to":"dfbec78f_e519bf79","updated":"2019-05-14 19:38:42.000000000","message":"Ah, actually... good catch. I missed Callable was one of them. Update coming.","commit_id":"ba2f03bdc8adc4e9dd09445543f33e8859f784fc"}]}
