)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added storyboard integration in skip_because decorator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* Since monasca tempest plugin bug is tracked on storyboard"},{"line_number":10,"context_line":"  but in skip_decause decorator method only take launchpad"},{"line_number":11,"context_line":"  bug id. It adds supports for including storyboard id for"},{"line_number":12,"context_line":"  the same."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa0c359_f35c84ee","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":2},"updated":"2018-02-20 07:36:10.000000000","message":"very nit: I feel this \u0027*\u0027 is unnecessary and we don\u0027t need these indents.","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"46ddef94682c26c074dfb5e0e13eb0964c100aec","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Added storyboard integration in skip_because decorator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Since monasca tempest plugin bug is tracked on storyboard"},{"line_number":10,"context_line":"but in skip_decause decorator method only take launchpad"},{"line_number":11,"context_line":"bug id. It adds supports for including storyboard id for"},{"line_number":12,"context_line":"the same."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5f7c97a3_1308ffd6","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":19},"updated":"2018-07-04 12:42:59.000000000","message":"nit: s/skip_decause/skip_because","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f7b3e7ec107ed0d13bd73111e6163e675a1ba890","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Note that Storyboard does **not** only track stories. It tracks"},{"line_number":21,"context_line":"bugs too: \"It all begins with a story. A story is a bug report or"},{"line_number":22,"context_line":"proposed feature. Stories are then further split into tasks,"},{"line_number":23,"context_line":"which affect a given project and branch.\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Unit tests and releasenotes are included."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5f7c97a3_ef071d1e","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":41},"updated":"2018-07-11 03:02:41.000000000","message":"This is [1]","commit_id":"21c04c435bd681441ee293a985c2229262b216f9"}],"releasenotes/notes/add-storyboard-in-skip-because-decorator-3e139aa8a4f7970f.yaml":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add usage of storyboard ID in @decorator.skip_because."},{"line_number":5,"context_line":"    It will help to skip the tests based on storyboard ID."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa0c359_3308acd7","line":5,"updated":"2018-02-20 07:36:10.000000000","message":"And also, it should be mentioned about related_bug, too?","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"}],"tempest/lib/decorators.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1643eacc06b5aecafb03b8c712af62708ada8526","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            if (\"bug\" in kwargs or \"story\" in kwargs) and skip is True:"},{"line_number":42,"context_line":"                if not kwargs[\u0027bug\u0027].isdigit():"},{"line_number":43,"context_line":"                    raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":44,"context_line":"                    msg \u003d \"Skipped until Bug: %s is resolved.\" % kwargs[\"bug\"]"},{"line_number":45,"context_line":"                elif not kwargs[\u0027story\u0027].isdigit():"},{"line_number":46,"context_line":"                    msg \u003d \"Skipped until Story: %s is \""},{"line_number":47,"context_line":"                    \"resolved.\" % kwargs[\"story\"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_f69a79c3","line":44,"range":{"start_line":44,"start_character":20,"end_line":44,"end_character":78},"updated":"2018-02-06 09:06:17.000000000","message":"this should be outside if otherwise it would not hit.","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1643eacc06b5aecafb03b8c712af62708ada8526","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":44,"context_line":"                    msg \u003d \"Skipped until Bug: %s is resolved.\" % kwargs[\"bug\"]"},{"line_number":45,"context_line":"                elif not kwargs[\u0027story\u0027].isdigit():"},{"line_number":46,"context_line":"                    msg \u003d \"Skipped until Story: %s is \""},{"line_number":47,"context_line":"                    \"resolved.\" % kwargs[\"story\"]"},{"line_number":48,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":49,"context_line":"            return f(*func_args, **func_kwargs)"},{"line_number":50,"context_line":"        return wrapper"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_16a045f4","line":47,"range":{"start_line":46,"start_character":20,"end_line":47,"end_character":49},"updated":"2018-02-06 09:06:17.000000000","message":"ditto","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1643eacc06b5aecafb03b8c712af62708ada8526","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                    skip \u003d True"},{"line_number":39,"context_line":"            else:"},{"line_number":40,"context_line":"                skip \u003d True"},{"line_number":41,"context_line":"            if (\"bug\" in kwargs or \"story\" in kwargs) and skip is True:"},{"line_number":42,"context_line":"                if not kwargs[\u0027bug\u0027].isdigit():"},{"line_number":43,"context_line":"                    raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":44,"context_line":"                    msg \u003d \"Skipped until Bug: %s is resolved.\" % kwargs[\"bug\"]"},{"line_number":45,"context_line":"                elif not kwargs[\u0027story\u0027].isdigit():"},{"line_number":46,"context_line":"                    msg \u003d \"Skipped until Story: %s is \""},{"line_number":47,"context_line":"                    \"resolved.\" % kwargs[\"story\"]"},{"line_number":48,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":49,"context_line":"            return f(*func_args, **func_kwargs)"},{"line_number":50,"context_line":"        return wrapper"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_f6e83917","line":47,"range":{"start_line":41,"start_character":0,"end_line":47,"end_character":49},"updated":"2018-02-06 09:06:17.000000000","message":"you can do it in a simple way like below (checking both as it can be case where test is skipped with bug and story both):\n\n            if \"bug\" in kwargs and skip is True:\n                if not kwargs[\u0027bug\u0027].isdigit():\n                    raise ValueError(\u0027bug must be a valid bug number\u0027)\n                msg \u003d \"Skipped until Bug: %s is resolved.\" % kwargs[\"bug\"]\n\n            if \"story\" in kwargs and skip is True:\n                if not kwargs[\u0027story\u0027].isdigit():\n                    raise ValueError(\u0027story must be a valid story number\u0027)\n                msg +\u003d \"Skipped until story: %s is resolved.\" % kwargs[\"story\"]","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1643eacc06b5aecafb03b8c712af62708ada8526","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return decorator"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def related_bug(bug, status_code\u003dNone):"},{"line_number":55,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @param bug: The launchpad bug number causing the test"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_f661193b","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":39},"updated":"2018-02-06 09:06:17.000000000","message":"take another optional arg here story\u003dfalse\n\nand change the links to storyboard accordingly. if needed later we can rename this decorator to related_issue for generic name.","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1643eacc06b5aecafb03b8c712af62708ada8526","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    return decorator"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def related_story(story, status_code\u003dNone):"},{"line_number":77,"context_line":"    \"\"\"A decorator useful to know solutions from Storyboard bug reports"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @param storu: The storyboard ID causing the test"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_9624550f","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":43},"updated":"2018-02-06 09:06:17.000000000","message":"i think we can reuse the existing decorator","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"b4383fe5dfcc98ec134f8a3812e5edc734a607a5","unresolved":false,"context_lines":[{"line_number":76,"context_line":"def related_story(story, status_code\u003dNone):"},{"line_number":77,"context_line":"    \"\"\"A decorator useful to know solutions from Storyboard bug reports"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @param storu: The storyboard ID causing the test"},{"line_number":80,"context_line":"    @param status_code: The status code related to the bug report"},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":"    def decorator(f):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_743afee7","line":79,"range":{"start_line":79,"start_character":11,"end_line":79,"end_character":16},"updated":"2018-02-05 14:08:26.000000000","message":"\u003d\u003d\u003e story, :)","commit_id":"96e9f6a0d1d985242c204a67f5f691226e703e45"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @param bug: bug number causing the test to skip"},{"line_number":29,"context_line":"    @param story: storyboard ID cauing the test to skip"},{"line_number":30,"context_line":"    @param condition: optional condition to be True for the skip to have place"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    def decorator(f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b3f35ce7","line":29,"range":{"start_line":29,"start_character":32,"end_line":29,"end_character":38},"updated":"2018-02-20 07:36:10.000000000","message":"typo: causing","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                if not kwargs[\u0027bug\u0027].isdigit():"},{"line_number":44,"context_line":"                    raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":45,"context_line":"                msg +\u003d \"Skipped until Bug: %s is resolved.\" % kwargs[\"bug\"]"},{"line_number":46,"context_line":"            raise testtools.TestCase.skipException(msg)"},{"line_number":47,"context_line":"            if \"story\" in kwargs and skip is True:"},{"line_number":48,"context_line":"                if not kwargs[\u0027story\u0027].isdigit():"},{"line_number":49,"context_line":"                    raise ValueError(\u0027story must be a valid story number\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_93cf407e","line":46,"updated":"2018-02-20 07:36:10.000000000","message":"This should be add one more indent? Otherwise, this skipException occurs every time.","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                if not kwargs[\u0027story\u0027].isdigit():"},{"line_number":49,"context_line":"                    raise ValueError(\u0027story must be a valid story number\u0027)"},{"line_number":50,"context_line":"                msg +\u003d \"Skipped until story: %s is resolved.\" % kwargs[\"story\"]"},{"line_number":51,"context_line":"            raise testtools.TestCase.skipException(msg)"},{"line_number":52,"context_line":"            return f(*func_args, **func_kwargs)"},{"line_number":53,"context_line":"        return wrapper"},{"line_number":54,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b3ca7c6b","line":51,"updated":"2018-02-20 07:36:10.000000000","message":"ditto","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0bd6e33a869eaf76f4114efaf678eb08f1c2a9a9","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":80,"context_line":"    @param bz_number: Bug number"},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":83,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return bug_url[bug_type]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def idempotent_id(id):"},{"line_number":88,"context_line":"    \"\"\"Stub for metadata decorator\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_5acb081d","line":85,"range":{"start_line":82,"start_character":0,"end_line":85,"end_character":28},"updated":"2018-03-12 10:46:25.000000000","message":"This works, but I don\u0027t think you should build both URLs when you need only one.","commit_id":"dfd351dc54e0de1f6cc92764adbfc0f95bed79ac"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a8a2967b310adc4b66bbbb643d29d3c2321bfa2b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":80,"context_line":"    @param bz_number: Bug number"},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":83,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return bug_url[bug_type]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def idempotent_id(id):"},{"line_number":88,"context_line":"    \"\"\"Stub for metadata decorator\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_95b41337","line":85,"range":{"start_line":82,"start_character":0,"end_line":85,"end_character":28},"in_reply_to":"df7087c5_5acb081d","updated":"2018-03-12 11:05:33.000000000","message":"Based on bug_type, it will generate bug url for launchpad or storyboard.","commit_id":"dfd351dc54e0de1f6cc92764adbfc0f95bed79ac"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"46ddef94682c26c074dfb5e0e13eb0964c100aec","unresolved":false,"context_lines":[{"line_number":25,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":26,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @param bug: bug number causing the test to skip (lp or storyboard)"},{"line_number":29,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":30,"context_line":"    @param condition: optional condition to be True for the skip to have place"},{"line_number":31,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_53e75710","line":28,"range":{"start_line":28,"start_character":52,"end_line":28,"end_character":56},"updated":"2018-07-04 12:42:59.000000000","message":"nit: better to write complete launchpad instead of lp(just to avoid confusion)","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":26,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @param bug: bug number causing the test to skip (lp or storyboard)"},{"line_number":29,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":30,"context_line":"    @param condition: optional condition to be True for the skip to have place"},{"line_number":31,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_2fb0b5fd","line":28,"range":{"start_line":28,"start_character":52,"end_line":28,"end_character":56},"in_reply_to":"5f7c97a3_53e75710","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027bug\u0027)"},{"line_number":43,"context_line":"            if \"bug\" in kwargs and skip is True:"},{"line_number":44,"context_line":"                if not kwargs[\u0027bug\u0027].isdigit():"},{"line_number":45,"context_line":"                    raise ValueError(\u0027%s must be a valid bug number\u0027"},{"line_number":46,"context_line":"                                     % bug_type)"},{"line_number":47,"context_line":"                msg +\u003d \"Skipped until %s: %s is resolved.\" % (bug_type,"},{"line_number":48,"context_line":"                                                              kwargs[\"bug\"])"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_f2ef8e1b","line":45,"range":{"start_line":45,"start_character":57,"end_line":45,"end_character":60},"updated":"2018-03-13 02:10:40.000000000","message":"this too should be bug_type","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027bug\u0027)"},{"line_number":43,"context_line":"            if \"bug\" in kwargs and skip is True:"},{"line_number":44,"context_line":"                if not kwargs[\u0027bug\u0027].isdigit():"},{"line_number":45,"context_line":"                    raise ValueError(\u0027%s must be a valid bug number\u0027"},{"line_number":46,"context_line":"                                     % bug_type)"},{"line_number":47,"context_line":"                msg +\u003d \"Skipped until %s: %s is resolved.\" % (bug_type,"},{"line_number":48,"context_line":"                                                              kwargs[\"bug\"])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_8fbb09e3","line":45,"range":{"start_line":45,"start_character":57,"end_line":45,"end_character":60},"in_reply_to":"df7087c5_f2ef8e1b","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def related_bug(bug, status_code\u003dNone, bug_type\u003d\u0027bug\u0027):"},{"line_number":56,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @param bug: The launchpad/storyboard bug number causing the test"},{"line_number":59,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_b2cef6b1","line":56,"range":{"start_line":56,"start_character":49,"end_line":56,"end_character":58},"updated":"2018-03-13 02:10:40.000000000","message":"launchpad/storyboard","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def related_bug(bug, status_code\u003dNone, bug_type\u003d\u0027bug\u0027):"},{"line_number":56,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @param bug: The launchpad/storyboard bug number causing the test"},{"line_number":59,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_6fb6adff","line":56,"range":{"start_line":56,"start_character":49,"end_line":56,"end_character":58},"in_reply_to":"df7087c5_b2cef6b1","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":69,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":70,"context_line":"                    if bug:"},{"line_number":71,"context_line":"                        LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":72,"context_line":"                                  \u0027The failure could be related to \u0027"},{"line_number":73,"context_line":"                                  \u0027%s\u0027, bug, get_bug_url(bug, bug_type))"},{"line_number":74,"context_line":"                raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_b2f596ef","line":71,"range":{"start_line":71,"start_character":69,"end_line":71,"end_character":72},"updated":"2018-03-13 02:10:40.000000000","message":"this needs to be bug_type","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":69,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":70,"context_line":"                    if bug:"},{"line_number":71,"context_line":"                        LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":72,"context_line":"                                  \u0027The failure could be related to \u0027"},{"line_number":73,"context_line":"                                  \u0027%s\u0027, bug, get_bug_url(bug, bug_type))"},{"line_number":74,"context_line":"                raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_cfe7c10f","line":71,"range":{"start_line":71,"start_character":69,"end_line":71,"end_character":72},"in_reply_to":"df7087c5_b2f596ef","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    return decorator"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def get_bug_url(bz_number, bug_type):"},{"line_number":80,"context_line":"    \"\"\"Get the bug url based on the bug_type and bz_number"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_52de7a6d","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":15},"updated":"2018-03-13 02:10:40.000000000","message":"you want to define this a private method ?","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    return decorator"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def get_bug_url(bz_number, bug_type):"},{"line_number":80,"context_line":"    \"\"\"Get the bug url based on the bug_type and bz_number"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_efe07dfc","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":15},"in_reply_to":"df7087c5_52de7a6d","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":79,"context_line":"def get_bug_url(bz_number, bug_type):"},{"line_number":80,"context_line":"    \"\"\"Get the bug url based on the bug_type and bz_number"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":83,"context_line":"    @param bz_number: Bug number"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":86,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_32e1862b","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":32},"updated":"2018-03-13 02:10:40.000000000","message":"can you reverse the order as per their position in  method signature.","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"def get_bug_url(bz_number, bug_type):"},{"line_number":80,"context_line":"    \"\"\"Get the bug url based on the bug_type and bz_number"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":83,"context_line":"    @param bz_number: Bug number"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":86,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_0fde193c","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":32},"in_reply_to":"df7087c5_32e1862b","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef0d571694894ea0ba854204dcb8ac1a964310d4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":83,"context_line":"    @param bz_number: Bug number"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":86,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    return bug_url[bug_type]"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_d2d36a5f","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":75},"updated":"2018-03-13 02:10:40.000000000","message":"or just simple if else with bug_type and build the single url at a time","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49ddc989fdd0266aa5ef2c807060444365cf026b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":83,"context_line":"    @param bz_number: Bug number"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":86,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    return bug_url[bug_type]"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_afea85d6","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":75},"in_reply_to":"5f7c97a3_041cc079","updated":"2018-07-11 02:56:17.000000000","message":"Done","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"bb37caf284a70aadb4c94305295c7b1c20d32b1f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    @param bug_type: \u0027bug\u0027 or \u0027story\u0027"},{"line_number":83,"context_line":"    @param bz_number: Bug number"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    bug_url \u003d {\u0027bug\u0027: \u0027https://launchpad.net/bugs/%s\u0027 % bz_number,"},{"line_number":86,"context_line":"               \u0027story\u0027: \u0027storyboard.openstack.org/#!/story/%s\u0027 % bz_number}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    return bug_url[bug_type]"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_041cc079","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":75},"in_reply_to":"df7087c5_d2d36a5f","updated":"2018-07-11 02:07:24.000000000","message":"I do not believe this implementation is correct. From the storyboard page:\n\n\"It all begins with a story. A story is a BUG REPORT or PROPOSED FEATURE. Stories are then further split into tasks, which affect a given project and branch.\"\n\nThis means that bugs can be tracked in Launchpad and Storyboard. I think this \"bug_url\" should treat both equally.\n\nSo the \"bug_type\" parameter shouldn\u0027t be \"story\" or \"bug\" but instead \"launchpad\" or \"storyboard\" because I think \"story\" vs. \"bug\" is misleading.","commit_id":"66c8ded180b371dea2c95b98054f3782bbf0dcf9"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"26d8140403a6781164743467cd5b5e3f6eb58ab7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Validates ``bug`` and ``bug_type`` values."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":36,"context_line":"    :param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":37,"context_line":"    :raises: InvalidParam if ``bug`` is not a digit or ``bug_type`` is not"},{"line_number":38,"context_line":"        a valid value"},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_01926da1","line":36,"updated":"2018-07-11 06:03:29.000000000","message":"I think this should be \u0027launchpad\u0027 or \u0027storyboard\u0027.","commit_id":"21c04c435bd681441ee293a985c2229262b216f9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a151dff76a3a60cfe42d2f943d48ab65efe35f5b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Validates ``bug`` and ``bug_type`` values."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":36,"context_line":"    :param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":37,"context_line":"    :raises: InvalidParam if ``bug`` is not a digit or ``bug_type`` is not"},{"line_number":38,"context_line":"        a valid value"},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_ac5b6084","line":36,"in_reply_to":"5f7c97a3_01926da1","updated":"2018-07-11 17:02:31.000000000","message":"Done","commit_id":"21c04c435bd681441ee293a985c2229262b216f9"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"26d8140403a6781164743467cd5b5e3f6eb58ab7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":64,"context_line":"    :param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":65,"context_line":"    :param condition: optional condition to be True for the skip to have place"},{"line_number":66,"context_line":"    :raises: testtools.TestCase.skipException if ``condition`` is True and"},{"line_number":67,"context_line":"        ``bug`` is included"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_218f6977","line":64,"updated":"2018-07-11 06:03:29.000000000","message":"ditto","commit_id":"21c04c435bd681441ee293a985c2229262b216f9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a151dff76a3a60cfe42d2f943d48ab65efe35f5b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":64,"context_line":"    :param bug_type: \u0027bug\u0027 or \u0027story\u0027, default \u0027bug\u0027"},{"line_number":65,"context_line":"    :param condition: optional condition to be True for the skip to have place"},{"line_number":66,"context_line":"    :raises: testtools.TestCase.skipException if ``condition`` is True and"},{"line_number":67,"context_line":"        ``bug`` is included"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_4c508c60","line":64,"in_reply_to":"5f7c97a3_218f6977","updated":"2018-07-11 17:02:31.000000000","message":"Done","commit_id":"21c04c435bd681441ee293a985c2229262b216f9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c9d0aad58ce436b92d590b11e9d12065fd38f5db","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        a valid value"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    if not bug.isdigit():"},{"line_number":41,"context_line":"        invalid_param \u003d \u0027%s must be a valid bug_type number\u0027 % bug_type"},{"line_number":42,"context_line":"        raise lib_exc.InvalidParam(invalid_param\u003dinvalid_param)"},{"line_number":43,"context_line":"    if bug_type not in _SUPPORTED_BUG_TYPES:"},{"line_number":44,"context_line":"        invalid_param \u003d \u0027bug_type \"%s\" must be one of: %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_bb138665","line":41,"range":{"start_line":41,"start_character":44,"end_line":41,"end_character":52},"updated":"2018-07-12 10:42:12.000000000","message":"%s","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c9d0aad58ce436b92d590b11e9d12065fd38f5db","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        a valid value"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    if not bug.isdigit():"},{"line_number":41,"context_line":"        invalid_param \u003d \u0027%s must be a valid bug_type number\u0027 % bug_type"},{"line_number":42,"context_line":"        raise lib_exc.InvalidParam(invalid_param\u003dinvalid_param)"},{"line_number":43,"context_line":"    if bug_type not in _SUPPORTED_BUG_TYPES:"},{"line_number":44,"context_line":"        invalid_param \u003d \u0027bug_type \"%s\" must be one of: %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_5b08322d","line":41,"range":{"start_line":41,"start_character":63,"end_line":41,"end_character":71},"updated":"2018-07-12 10:42:12.000000000","message":"bug, bug_type","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f14a9043123440a9900b653718aa066d0c543084","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        a valid value"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    if not bug.isdigit():"},{"line_number":41,"context_line":"        invalid_param \u003d \u0027%s must be a valid bug_type number\u0027 % bug_type"},{"line_number":42,"context_line":"        raise lib_exc.InvalidParam(invalid_param\u003dinvalid_param)"},{"line_number":43,"context_line":"    if bug_type not in _SUPPORTED_BUG_TYPES:"},{"line_number":44,"context_line":"        invalid_param \u003d \u0027bug_type \"%s\" must be one of: %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_b01cf714","line":41,"range":{"start_line":41,"start_character":44,"end_line":41,"end_character":52},"in_reply_to":"5f7c97a3_bb138665","updated":"2018-07-12 18:38:33.000000000","message":"Done","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"5262b1382aa696b787543cbff9a8ffbe12aa494c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_cec6c39d","line":60,"range":{"start_line":60,"start_character":17,"end_line":60,"end_character":32},"updated":"2018-07-12 07:43:02.000000000","message":"I wonder why parameters to this method are kept secret here. Why not to make them explicit? I would rather write this method as below:\n\n  def skip_because(bug, condition\u003dNone, bug_type\u003d\u0027launchpad\u0027)\n\nThen inside wrapper to check for condition i would rather write:\n\n  def wrapper(*func_args, **func_kwargs)\n      skip \u003d True\n      if condition is not None:\n          skip \u003d bool(condition)\n\n      if skip:\n         # Bug is a required parameter and no need to check if it is given\n         bug_url \u003d _get_bug_url(bug, bug_type)\n         msg \u003d \"Skipped until {bug_url}: is resolved.\".format(bug_url\u003dbug_url)\n         raise testtools.TestCase.skipException(msg)\n\n      return f(*func_args, **func_kwargs)","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"16894917165a2dda778a57c65d0f0bef14c34141","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_e8e900ab","line":60,"range":{"start_line":60,"start_character":17,"end_line":60,"end_character":32},"in_reply_to":"5f7c97a3_906f7b5f","updated":"2018-07-14 11:56:34.000000000","message":"let\u0027s not do that, that break this interface in backward incompatible way. even if any plugins/user passing unnecessary arg by mistake get break. \n\nI agree that actual args, kwargs are better but to avoid the breaking this interface let\u0027s keep it like this only. Doc string explain all the required arguments clearly.","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f14a9043123440a9900b653718aa066d0c543084","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_906f7b5f","line":60,"range":{"start_line":60,"start_character":17,"end_line":60,"end_character":32},"in_reply_to":"5f7c97a3_90b77b22","updated":"2018-07-12 18:38:33.000000000","message":"Done, except test: `test_skip_because_bug_without_bug_never_skips` breaks since bug must be optional (in which case test is just skipped altogether). Required for backwards compatibility. So bug\u003dNone is used.","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"16f52ada9e02436ef09db68907d73b5df1822987","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(*args, **kwargs):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_90b77b22","line":60,"range":{"start_line":60,"start_character":17,"end_line":60,"end_character":32},"in_reply_to":"5f7c97a3_cec6c39d","updated":"2018-07-12 18:08:50.000000000","message":"Hmm, currently this implementation assumes users are doing this:\n\n    skip_because(bug\u003d\u002712346\u0027, condition\u003dTrue)\n\nWhich means that I agree we can safely change this without breaking backwards compatibility.","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"5262b1382aa696b787543cbff9a8ffbe12aa494c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":81,"context_line":"                bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":82,"context_line":"                _validate_bug_and_bug_type(bug, bug_type)"},{"line_number":83,"context_line":"                msg +\u003d \"Skipped until %s bug: %s is resolved.\" % ("},{"line_number":84,"context_line":"                    bug_type, bug)"},{"line_number":85,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":86,"context_line":"            return f(*func_args, **func_kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2e289783","line":83,"range":{"start_line":83,"start_character":23,"end_line":83,"end_character":62},"updated":"2018-07-12 07:43:02.000000000","message":"It would be nice to have bug URL here too.","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c9d0aad58ce436b92d590b11e9d12065fd38f5db","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":81,"context_line":"                bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":82,"context_line":"                _validate_bug_and_bug_type(bug, bug_type)"},{"line_number":83,"context_line":"                msg +\u003d \"Skipped until %s bug: %s is resolved.\" % ("},{"line_number":84,"context_line":"                    bug_type, bug)"},{"line_number":85,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":86,"context_line":"            return f(*func_args, **func_kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_fb301e09","line":83,"range":{"start_line":83,"start_character":23,"end_line":83,"end_character":62},"in_reply_to":"5f7c97a3_2e289783","updated":"2018-07-12 10:42:12.000000000","message":"+1","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f14a9043123440a9900b653718aa066d0c543084","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":81,"context_line":"                bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":82,"context_line":"                _validate_bug_and_bug_type(bug, bug_type)"},{"line_number":83,"context_line":"                msg +\u003d \"Skipped until %s bug: %s is resolved.\" % ("},{"line_number":84,"context_line":"                    bug_type, bug)"},{"line_number":85,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":86,"context_line":"            return f(*func_args, **func_kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_308a2713","line":83,"range":{"start_line":83,"start_character":23,"end_line":83,"end_character":62},"in_reply_to":"5f7c97a3_fb301e09","updated":"2018-07-12 18:38:33.000000000","message":"Done","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"5262b1382aa696b787543cbff9a8ffbe12aa494c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return decorator"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def related_bug(bug, status_code\u003dNone, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":92,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad/storyboard reports"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    :param bug: The launchpad/storyboard bug number causing the test bug"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_931f9870","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":61},"updated":"2018-07-12 07:43:02.000000000","message":"Can you create wrapper method to this one, called related_story that calls this one but uses storyboard as default bug_type? It would make life a bit easier. ;-)","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c9d0aad58ce436b92d590b11e9d12065fd38f5db","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return decorator"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def related_bug(bug, status_code\u003dNone, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":92,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad/storyboard reports"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    :param bug: The launchpad/storyboard bug number causing the test bug"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_bb82a6c6","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":61},"in_reply_to":"5f7c97a3_931f9870","updated":"2018-07-12 10:42:12.000000000","message":"wrapper method is little costly here as this is lib function. I remember it was that way and we decided to got with single method.","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f14a9043123440a9900b653718aa066d0c543084","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return decorator"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def related_bug(bug, status_code\u003dNone, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":92,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad/storyboard reports"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    :param bug: The launchpad/storyboard bug number causing the test bug"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_b0671753","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":61},"in_reply_to":"5f7c97a3_bb82a6c6","updated":"2018-07-12 18:38:33.000000000","message":"Leaving as is","commit_id":"efd522b90826ce75474c23bde85dc8ed3d7ceea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"16894917165a2dda778a57c65d0f0bef14c34141","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(bug\u003dNone, condition\u003dNone, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    ``bug`` must be a number and ``condition`` must be true for the test to"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_88264c22","line":60,"range":{"start_line":60,"start_character":16,"end_line":60,"end_character":65},"updated":"2018-07-14 11:56:34.000000000","message":"let\u0027s keep this as it is to avoid changing this interface in backward incompatible way.","commit_id":"ac21f4524dc7d96703900ec7f8c08903fea1967f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"39611e0953dcf296cc5e56db3accadbd4043965a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return _SUPPORTED_BUG_TYPES[bug_type] % bug"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def skip_because(bug\u003dNone, condition\u003dNone, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":61,"context_line":"    \"\"\"A decorator useful to skip tests hitting known bugs"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    ``bug`` must be a number and ``condition`` must be true for the test to"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_79e4e442","line":60,"range":{"start_line":60,"start_character":16,"end_line":60,"end_character":65},"in_reply_to":"5f7c97a3_88264c22","updated":"2018-07-14 23:16:40.000000000","message":"Good point about adding extra args, kwargs making this backwards incompatible, so will go back to current impl.","commit_id":"ac21f4524dc7d96703900ec7f8c08903fea1967f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"294945cdb89f53a0f3616727c0e39b9d689a90a7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"def _get_bug_url(bug, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":50,"context_line":"    \"\"\"Get the bug URL based on the ``bug_type`` and ``bug``"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    :param bug: The launchpad/storyboard bug number causing the test"},{"line_number":53,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":54,"context_line":"    :returns: Bug URL corresponding to ``bug_type`` value"},{"line_number":55,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_d428de85","line":52,"range":{"start_line":52,"start_character":64,"end_line":52,"end_character":68},"updated":"2018-07-20 02:38:08.000000000","message":"test bug","commit_id":"7d8c2810319b606f7a04cd79d63734394c70dcd0"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"f833a9cce3ddefde15ac15b892520f81a6cf2f99","unresolved":false,"context_lines":[{"line_number":49,"context_line":"def _get_bug_url(bug, bug_type\u003d\u0027launchpad\u0027):"},{"line_number":50,"context_line":"    \"\"\"Get the bug URL based on the ``bug_type`` and ``bug``"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    :param bug: The launchpad/storyboard bug number causing the test"},{"line_number":53,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":54,"context_line":"    :returns: Bug URL corresponding to ``bug_type`` value"},{"line_number":55,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_f698fa67","line":52,"updated":"2018-07-26 08:49:34.000000000","message":"yeah, that\u0027s better.","commit_id":"7d8c2810319b606f7a04cd79d63734394c70dcd0"}],"tempest/tests/lib/test_decorators.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4ca36aedda7b4c191742dbfbdf8b159fe1cc47f7","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            raise MyException(status_code\u003d500)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        @decorators.related_bug(bug\u003d\"1234\", status_code\u003d500)"},{"line_number":164,"context_line":"        def test_foo(self):"},{"line_number":165,"context_line":"            f(self)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        with mock.patch.object(decorators.LOG, \u0027error\u0027) as m_error:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_f3b484d3","line":164,"range":{"start_line":164,"start_character":12,"end_line":164,"end_character":20},"updated":"2018-02-20 07:36:10.000000000","message":"Can you add tests for related_bug too?","commit_id":"0cf4c9b82c712a12d0e07332cb94995efc7e4e56"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"f833a9cce3ddefde15ac15b892520f81a6cf2f99","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        test_foo(sentinel)"},{"line_number":165,"context_line":"        f.assert_called_once_with(sentinel)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_relatedbug_when_exception_with_launchpad_bug_type(self):"},{"line_number":168,"context_line":"        \"\"\"Validate related_bug decorator with bug_type \u003d\u003d \u0027launchpad\u0027\"\"\""},{"line_number":169,"context_line":"        MyException \u003d self._get_my_exception()"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_d69dbe58","line":167,"updated":"2018-07-26 08:49:34.000000000","message":"I feel it might be better to add a test case for bug_type\u003d\u0027launchpad\u0027 explicitly because this is actually just checking the default bug_type which is \u0027launchpad\u0027 implicitly.","commit_id":"7d8c2810319b606f7a04cd79d63734394c70dcd0"}]}
