)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"9e6d2417ef34d7465d0d50d94ee1b03a3fece1ce","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add a script to create review dashboard for a milestone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with approved-rfe"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba8a016a_f07cf1b6","line":10,"updated":"2015-11-23 21:49:13.000000000","message":"it\u0027s rfe-approved?","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3b13dfb73c03286328ea8227a291162aab3bb769","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add a script to create review dashboard for a milestone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with approved-rfe"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_f52a107e","line":10,"in_reply_to":"ba8a016a_f07cf1b6","updated":"2015-11-24 11:29:59.000000000","message":"doh!","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd7bd68cddfaf1815b53312f80027126e6d2845a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with rfe-approved"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"With this information the scripts prints queries that can be used"},{"line_number":15,"context_line":"in Gerrit directly and creates a .dash file that can be used by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_9b326a0f","line":12,"updated":"2015-11-26 01:34:46.000000000","message":"What if the script gets the release (or milestone) as input?","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with rfe-approved"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"With this information the scripts prints queries that can be used"},{"line_number":15,"context_line":"in Gerrit directly and creates a .dash file that can be used by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_2e4510b2","line":12,"in_reply_to":"9a8ffd7b_9b326a0f","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"bee8532a67fde42305e3e95cc4dd878ef4971ee9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with rfe-approved"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"With this information the scripts prints queries that can be used"},{"line_number":15,"context_line":"in Gerrit directly and creates a .dash file that can be used by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_6f9a2d70","line":12,"updated":"2015-11-26 21:07:56.000000000","message":"Should you mention here that it is the milestone as passed by the caller and not necessarily Mitaka-1?","commit_id":"90a97b0bd4badfd014e004d31ecca0af972f248f"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"85b12242b4026f239cbe521067cb7acf15f85b7c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This script queries launchpad to get:"},{"line_number":10,"context_line":"1) Bug number of bugs tagged with rfe-approved"},{"line_number":11,"context_line":"2) Bug number of critical/high bugs"},{"line_number":12,"context_line":"3) list of blueprints targeted for the current milestone (mitaka-1)"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"With this information the scripts prints queries that can be used"},{"line_number":15,"context_line":"in Gerrit directly and creates a .dash file that can be used by"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_31e1c82d","line":12,"in_reply_to":"9a8ffd7b_6f9a2d70","updated":"2015-11-27 15:08:03.000000000","message":"Done","commit_id":"90a97b0bd4badfd014e004d31ecca0af972f248f"}],"tools/milestone-review-dash.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c64c93c5eaf05e1e082cd2a166c1a2893583ecb1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"                                        version\u003d\"devel\")"},{"line_number":8,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"m \u003d neutron.getMilestone(name\u003dmilestone)"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_f1f4e9cf","line":10,"updated":"2015-11-24 05:43:01.000000000","message":"This variable isn\u0027t used anywhere","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3b13dfb73c03286328ea8227a291162aab3bb769","unresolved":false,"context_lines":[{"line_number":7,"context_line":"                                        version\u003d\"devel\")"},{"line_number":8,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"m \u003d neutron.getMilestone(name\u003dmilestone)"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_b23fbed5","line":10,"in_reply_to":"ba8a016a_f1f4e9cf","updated":"2015-11-24 11:29:59.000000000","message":"Done","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ea6a800c78073c764a6f08e4b8b9b4f7b31e90e9","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"f \u003d open(file_name, \u0027w\u0027)"},{"line_number":15,"context_line":"title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":16,"context_line":"f.write(title)"},{"line_number":17,"context_line":"f.write(\"description \u003d Review Inbox\\n\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_a0aa9117","line":14,"updated":"2015-11-24 03:42:32.000000000","message":"with open(file_name, \u0027w\u0027) as f:\n    # indent all the code below and you don\u0027t need to call f.close()\n\nThe advantage of this is the file will always close, even if an error occurs.","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3b13dfb73c03286328ea8227a291162aab3bb769","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"f \u003d open(file_name, \u0027w\u0027)"},{"line_number":15,"context_line":"title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":16,"context_line":"f.write(title)"},{"line_number":17,"context_line":"f.write(\"description \u003d Review Inbox\\n\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_522532c0","line":14,"in_reply_to":"ba8a016a_a0aa9117","updated":"2015-11-24 11:29:59.000000000","message":"Done","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ea6a800c78073c764a6f08e4b8b9b4f7b31e90e9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":16,"context_line":"f.write(title)"},{"line_number":17,"context_line":"f.write(\"description \u003d Review Inbox\\n\")"},{"line_number":18,"context_line":"f.write(\"foreach \u003d (project:openstack/neutron OR project:openstack/python-neutronclient OR project:openstack/neutron-specs) status:open NOT owner:self NOT label:Workflow\u003c\u003d-1 label:Verified\u003e\u003d1,jenkins NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"},{"line_number":19,"context_line":"f.write(\"\\n\")"},{"line_number":20,"context_line":"rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":21,"context_line":"query \u003d \"(\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_e07739d2","line":18,"updated":"2015-11-24 03:42:32.000000000","message":"You could split this string across lines for readability.","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3b13dfb73c03286328ea8227a291162aab3bb769","unresolved":false,"context_lines":[{"line_number":15,"context_line":"title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":16,"context_line":"f.write(title)"},{"line_number":17,"context_line":"f.write(\"description \u003d Review Inbox\\n\")"},{"line_number":18,"context_line":"f.write(\"foreach \u003d (project:openstack/neutron OR project:openstack/python-neutronclient OR project:openstack/neutron-specs) status:open NOT owner:self NOT label:Workflow\u003c\u003d-1 label:Verified\u003e\u003d1,jenkins NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"},{"line_number":19,"context_line":"f.write(\"\\n\")"},{"line_number":20,"context_line":"rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":21,"context_line":"query \u003d \"(\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_7222b6bb","line":18,"in_reply_to":"ba8a016a_e07739d2","updated":"2015-11-24 11:29:59.000000000","message":"Done","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"503735fa4c143272fe80ed595f588bf9bfc79fc5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"for s in neutron.valid_specifications:"},{"line_number":48,"context_line":"    if s.milestone is not None:"},{"line_number":49,"context_line":"        if s.milestone.name \u003d\u003d milestone:"},{"line_number":50,"context_line":"            query +\u003d (\"topic:%s OR \" % s.name)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"query \u003d query[:-4]"},{"line_number":53,"context_line":"query +\u003d \")\\n\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_d898011e","line":50,"updated":"2015-11-23 17:41:38.000000000","message":"this is missing bp/ no?","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3b13dfb73c03286328ea8227a291162aab3bb769","unresolved":false,"context_lines":[{"line_number":47,"context_line":"for s in neutron.valid_specifications:"},{"line_number":48,"context_line":"    if s.milestone is not None:"},{"line_number":49,"context_line":"        if s.milestone.name \u003d\u003d milestone:"},{"line_number":50,"context_line":"            query +\u003d (\"topic:%s OR \" % s.name)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"query \u003d query[:-4]"},{"line_number":53,"context_line":"query +\u003d \")\\n\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_af0035ac","line":50,"in_reply_to":"ba8a016a_d898011e","updated":"2015-11-24 11:29:59.000000000","message":"doh!","commit_id":"a977aa089fef5f3de0e2b2bd209bb89f7a77ff0c"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"37a90e3f6f9da843917aeb180d333d2be5fe0e57","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_6f87c8d7","line":1,"updated":"2015-11-25 22:20:48.000000000","message":"Unless you started working for the foundation you can either remove this or add your employer\u0027s copyright.","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_a64fee69","line":1,"in_reply_to":"9a8ffd7b_6f87c8d7","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd7bd68cddfaf1815b53312f80027126e6d2845a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"},{"line_number":7,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_f68ced80","line":4,"updated":"2015-11-26 01:34:46.000000000","message":"can we add\n\n#!/usr/bin/env python\n\nAnd make this executable?","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"},{"line_number":7,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_867f4a65","line":4,"in_reply_to":"9a8ffd7b_f68ced80","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd7bd68cddfaf1815b53312f80027126e6d2845a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"milestone \u003d \"mitaka-1\""},{"line_number":19,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_169891bf","line":16,"updated":"2015-11-26 01:34:46.000000000","message":"can we add a comment that explains how to use this?","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"milestone \u003d \"mitaka-1\""},{"line_number":19,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_1ab88a29","line":16,"in_reply_to":"9a8ffd7b_169891bf","updated":"2015-11-26 17:31:25.000000000","message":"I added a description in the arg parser","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"37a90e3f6f9da843917aeb180d333d2be5fe0e57","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"milestone \u003d \"mitaka-1\""},{"line_number":19,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""},{"line_number":20,"context_line":"launchpad \u003d Launchpad.login_anonymously(\u0027just testing\u0027, \u0027production\u0027, cachedir,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_8fbb0ce5","line":17,"updated":"2015-11-25 22:20:48.000000000","message":"As others have said let\u0027s add argparse here and add the milestone as an arg.","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"milestone \u003d \"mitaka-1\""},{"line_number":19,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""},{"line_number":20,"context_line":"launchpad \u003d Launchpad.login_anonymously(\u0027just testing\u0027, \u0027production\u0027, cachedir,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_baa85edc","line":17,"in_reply_to":"9a8ffd7b_8fbb0ce5","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"37a90e3f6f9da843917aeb180d333d2be5fe0e57","unresolved":false,"context_lines":[{"line_number":22,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":23,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"with open(file_name, \u0027w\u0027) as f:"},{"line_number":26,"context_line":"    title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":27,"context_line":"    f.write(title)"},{"line_number":28,"context_line":"    f.write(\"description \u003d Review Inbox\\n\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_4f83e404","line":25,"updated":"2015-11-25 22:20:48.000000000","message":"I think this will be a lot more readable if the code below is split out to two methods. The first will return the query to write, and the second will do the writing.\n\n  def generate_query(milestone):\n    return \"[dashboard\\n...\"\n\n  def write_query(query):\n    with open(...)","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":22,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":23,"context_line":"file_name \u003d milestone + \u0027.dash\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"with open(file_name, \u0027w\u0027) as f:"},{"line_number":26,"context_line":"    title \u003d \"[dashboard]\\ntitle \u003d Neutron %s Review Inbox\\n\" % milestone"},{"line_number":27,"context_line":"    f.write(title)"},{"line_number":28,"context_line":"    f.write(\"description \u003d Review Inbox\\n\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_da33e212","line":25,"in_reply_to":"9a8ffd7b_4f83e404","updated":"2015-11-26 17:31:25.000000000","message":"I refactored a bit, hope you like it better :)","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd7bd68cddfaf1815b53312f80027126e6d2845a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":36,"context_line":"    query \u003d \"(\""},{"line_number":37,"context_line":"    for r in rfe:"},{"line_number":38,"context_line":"        query +\u003d (\"topic:bug/%d OR \" % r.bug.id)"},{"line_number":39,"context_line":"    query \u003d query[:-4]"},{"line_number":40,"context_line":"    query +\u003d \")\\n\\n\""},{"line_number":41,"context_line":"    print(\"RFE Approved\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_366fd593","line":38,"updated":"2015-11-26 01:34:46.000000000","message":"have you tried simply adding message:%d too? Like this:\n\nquery +\u003d (\"topic:bug/%d OR message:%d \" % (r.bug.id, r.bug.id))","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":36,"context_line":"    query \u003d \"(\""},{"line_number":37,"context_line":"    for r in rfe:"},{"line_number":38,"context_line":"        query +\u003d (\"topic:bug/%d OR \" % r.bug.id)"},{"line_number":39,"context_line":"    query \u003d query[:-4]"},{"line_number":40,"context_line":"    query +\u003d \")\\n\\n\""},{"line_number":41,"context_line":"    print(\"RFE Approved\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_6495793d","line":38,"in_reply_to":"9a8ffd7b_366fd593","updated":"2015-11-26 17:31:25.000000000","message":"I tested it, it doesn\u0027t work well. If you have lots of ORs for the field message the filter doesn\u0027t work well and includes patches that have nothing to do with the bugs. I also tried with the field \"bug\" but I had the opposite problem, it doesn\u0027t find the right patch and returns no result.","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"37a90e3f6f9da843917aeb180d333d2be5fe0e57","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    query \u003d \"(\""},{"line_number":49,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":50,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"Critical\", \"High\"])"},{"line_number":51,"context_line":"    for b in bugs:"},{"line_number":52,"context_line":"        query +\u003d (\"topic:bug/%d OR \" % b.bug.id)"},{"line_number":53,"context_line":"    query \u003d query[:-4]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_afa5b0b5","line":50,"updated":"2015-11-25 22:20:48.000000000","message":"I really think we should have two separate sections, one for critical and one for high.","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    query \u003d \"(\""},{"line_number":49,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":50,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"Critical\", \"High\"])"},{"line_number":51,"context_line":"    for b in bugs:"},{"line_number":52,"context_line":"        query +\u003d (\"topic:bug/%d OR \" % b.bug.id)"},{"line_number":53,"context_line":"    query \u003d query[:-4]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_ba3e1ed8","line":50,"in_reply_to":"9a8ffd7b_afa5b0b5","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"df761021433e46695f9881c9b7e4e39d48ee5d4f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    f.write(section)"},{"line_number":75,"context_line":"    f.write(\"query \u003d \")"},{"line_number":76,"context_line":"    f.write(query)"},{"line_number":77,"context_line":"    f.close()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_00b09042","line":77,"updated":"2015-11-24 21:54:19.000000000","message":"Not needed due to \"with open()\" at line 25.","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"44854e0ca119a78cb83e482768865e1019c00bff","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    f.write(section)"},{"line_number":75,"context_line":"    f.write(\"query \u003d \")"},{"line_number":76,"context_line":"    f.write(query)"},{"line_number":77,"context_line":"    f.close()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_9ac8faa9","line":77,"in_reply_to":"9a8ffd7b_00b09042","updated":"2015-11-26 17:31:25.000000000","message":"Done","commit_id":"38c5b24a02ecfd4ff32f5438b82f95a11faf9a1a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"848de2c1d4d60b30654d691de0312dca2d852bb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_2fe717ad","line":1,"updated":"2015-11-28 02:00:12.000000000","message":"For this to be useful we need the module to have executable permissions. Also, I am lazy slob that doesn\u0027t want to type \u0027python\u0027 in front of the script. :)","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9b6c6c6a9fcf564be6aacf88191cbf131409bebc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_278e2028","line":1,"in_reply_to":"9a8ffd7b_2fe717ad","updated":"2015-11-30 17:29:01.000000000","message":"right","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"29d0469c3cbea3d9e92e46af7fcc3ac3acab42b2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    print(\"List of active milestones %s\" % milestone_names)"},{"line_number":30,"context_line":"    return False"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def get_approved_rfe_query():"},{"line_number":33,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":34,"context_line":"    if not rfe:"},{"line_number":35,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_83693cfb","line":32,"updated":"2015-11-28 02:16:26.000000000","message":"Nit: These queries take a bit of time on slow connections. Consider printing something here, like:\n\n    print(\"Searching for rfe-approved bugs...\")","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9b6c6c6a9fcf564be6aacf88191cbf131409bebc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    print(\"List of active milestones %s\" % milestone_names)"},{"line_number":30,"context_line":"    return False"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def get_approved_rfe_query():"},{"line_number":33,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":34,"context_line":"    if not rfe:"},{"line_number":35,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_24cffeb4","line":32,"in_reply_to":"9a8ffd7b_83693cfb","updated":"2015-11-30 17:29:01.000000000","message":"Done","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"29d0469c3cbea3d9e92e46af7fcc3ac3acab42b2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return query"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_critical_bugs_query():"},{"line_number":45,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":46,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"Critical\"])"},{"line_number":47,"context_line":"    if not bugs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_236c1007","line":44,"updated":"2015-11-28 02:16:26.000000000","message":"and here","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9b6c6c6a9fcf564be6aacf88191cbf131409bebc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return query"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_critical_bugs_query():"},{"line_number":45,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":46,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"Critical\"])"},{"line_number":47,"context_line":"    if not bugs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_44d48246","line":44,"in_reply_to":"9a8ffd7b_236c1007","updated":"2015-11-30 17:29:01.000000000","message":"Done","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"29d0469c3cbea3d9e92e46af7fcc3ac3acab42b2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return query"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_high_bugs_query():"},{"line_number":58,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":59,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"High\"])"},{"line_number":60,"context_line":"    if not bugs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_436fd4fb","line":57,"updated":"2015-11-28 02:16:26.000000000","message":"and here","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9b6c6c6a9fcf564be6aacf88191cbf131409bebc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return query"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_high_bugs_query():"},{"line_number":58,"context_line":"    bugs \u003d neutron.searchTasks("},{"line_number":59,"context_line":"        status\u003d[\"In Progress\"], importance\u003d[\"High\"])"},{"line_number":60,"context_line":"    if not bugs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_04ce7ab4","line":57,"in_reply_to":"9a8ffd7b_436fd4fb","updated":"2015-11-30 17:29:01.000000000","message":"Done","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"29d0469c3cbea3d9e92e46af7fcc3ac3acab42b2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    return query"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def get_specs_query(milestone):"},{"line_number":71,"context_line":"    query \u003d \"(\""},{"line_number":72,"context_line":"    for s in neutron.valid_specifications:"},{"line_number":73,"context_line":"        if s.milestone is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_e37a88bc","line":70,"updated":"2015-11-28 02:16:26.000000000","message":"and here","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9b6c6c6a9fcf564be6aacf88191cbf131409bebc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    return query"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def get_specs_query(milestone):"},{"line_number":71,"context_line":"    query \u003d \"(\""},{"line_number":72,"context_line":"    for s in neutron.valid_specifications:"},{"line_number":73,"context_line":"        if s.milestone is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_a4c3ee89","line":70,"in_reply_to":"9a8ffd7b_e37a88bc","updated":"2015-11-30 17:29:01.000000000","message":"Done","commit_id":"3d42d5663283ae48eef5e299950f72e0fc20dd96"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4830064e0f46f7a6dd549f2b73da4a6490015ea7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_00af3d7e","line":1,"updated":"2015-11-30 20:37:43.000000000","message":"I\u0027d rather this be \"#!/usr/bin/env python\" so that it works correctly from a virtual env.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_779c560e","line":1,"in_reply_to":"9a8ffd7b_00af3d7e","updated":"2015-12-02 16:49:03.000000000","message":"Done","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4830064e0f46f7a6dd549f2b73da4a6490015ea7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_200da137","line":3,"updated":"2015-11-30 20:37:43.000000000","message":"nit: I\u0027m not sure that this line has any meaning with a copyright statement.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_97a1ba48","line":3,"in_reply_to":"9a8ffd7b_200da137","updated":"2015-12-02 16:49:03.000000000","message":"Done","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a0c6f5987a886e5174ebc695615e5d4899973c08","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def is_milestone_valid(name):"},{"line_number":23,"context_line":"    milestone_names \u003d []"},{"line_number":24,"context_line":"    for s in neutron.active_milestones:"},{"line_number":25,"context_line":"        milestone_names.append(s.name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_201041a8","line":22,"updated":"2015-11-30 20:46:17.000000000","message":"It would be nice for these methods to accept \u0027neutron\u0027 as a parameter instead of treating it as a global, just a readability boost.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from launchpadlib.launchpad import Launchpad"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def is_milestone_valid(name):"},{"line_number":23,"context_line":"    milestone_names \u003d []"},{"line_number":24,"context_line":"    for s in neutron.active_milestones:"},{"line_number":25,"context_line":"        milestone_names.append(s.name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_9a847f0b","line":22,"in_reply_to":"9a8ffd7b_201041a8","updated":"2015-12-02 16:49:03.000000000","message":"Done","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a0c6f5987a886e5174ebc695615e5d4899973c08","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    return False"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_approved_rfe_query():"},{"line_number":34,"context_line":"    print(\"Searching for rfe-approved bugs...\")"},{"line_number":35,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":36,"context_line":"    if not rfe:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_40c6a517","line":33,"updated":"2015-11-30 20:46:17.000000000","message":"It looks like get_approved_rfe_query, get_critical_bugs_query and get_high_bugs_query is the same method, the only difference is what you pass to neutron.searchTasks. Let\u0027s eliminate code duplication...","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    return False"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_approved_rfe_query():"},{"line_number":34,"context_line":"    print(\"Searching for rfe-approved bugs...\")"},{"line_number":35,"context_line":"    rfe \u003d neutron.searchTasks(tags\u003d[\"rfe-approved\"])"},{"line_number":36,"context_line":"    if not rfe:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_fa734b4c","line":33,"in_reply_to":"9a8ffd7b_40c6a517","updated":"2015-12-02 16:49:03.000000000","message":"right","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a0c6f5987a886e5174ebc695615e5d4899973c08","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        f.write(query)"},{"line_number":96,"context_line":"        print(section_name)"},{"line_number":97,"context_line":"        print(query)"},{"line_number":98,"context_line":"    else:"},{"line_number":99,"context_line":"        print(section_name)"},{"line_number":100,"context_line":"        print(\"No result found\\n\")"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_e0feb937","line":98,"updated":"2015-11-30 20:46:17.000000000","message":"Nit: print(section_name) appears in both branches of the conditional.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        f.write(query)"},{"line_number":96,"context_line":"        print(section_name)"},{"line_number":97,"context_line":"        print(query)"},{"line_number":98,"context_line":"    else:"},{"line_number":99,"context_line":"        print(section_name)"},{"line_number":100,"context_line":"        print(\"No result found\\n\")"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ba906344","line":98,"in_reply_to":"9a8ffd7b_e0feb937","updated":"2015-12-02 16:49:03.000000000","message":"Done","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a0c6f5987a886e5174ebc695615e5d4899973c08","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"parser \u003d argparse.ArgumentParser("},{"line_number":104,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":105,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":106,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":107,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":108,"context_line":"                \u0027 directly.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_60672926","line":105,"updated":"2015-11-30 20:46:17.000000000","message":"I would consider adding a -o, --output\u003d%s option that lets you specify the path to the output file, and the default would be the current behavior.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"parser \u003d argparse.ArgumentParser("},{"line_number":104,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":105,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":106,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":107,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":108,"context_line":"                \u0027 directly.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_45a2bc9a","line":105,"in_reply_to":"9a8ffd7b_60672926","updated":"2015-12-02 16:49:03.000000000","message":"Done","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a0c6f5987a886e5174ebc695615e5d4899973c08","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":105,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":106,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":107,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":108,"context_line":"                \u0027 directly.\u0027)"},{"line_number":109,"context_line":"parser.add_argument(\u0027milestone\u0027, type\u003dstr, help\u003d\u0027The release milestone\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_c03e1529","line":107,"updated":"2015-11-30 20:46:17.000000000","message":"This is actually incorrect, since the script prints, for example \u0027Searching for high bugs...\u0027. It\u0027s not critical, but it would be useful to be able to get the query without using the dash creator.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":105,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":106,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":107,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":108,"context_line":"                \u0027 directly.\u0027)"},{"line_number":109,"context_line":"parser.add_argument(\u0027milestone\u0027, type\u003dstr, help\u003d\u0027The release milestone\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ba19438a","line":107,"in_reply_to":"9a8ffd7b_7f6d4d98","updated":"2015-12-02 16:49:03.000000000","message":"@Assaf was you suggestion to remove the prints like \u0027Searching for high bugs...\u0027?\nI removed it.\n\n@Carl any suggestion for better wording? I like the idea of improving the integration. I will look into it, if we publish it in the docs we can have a place to retrieve the latest dashboard.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"07b206428ea41185e0447e68ad31c5a61c253555","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":105,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":106,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":107,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":108,"context_line":"                \u0027 directly.\u0027)"},{"line_number":109,"context_line":"parser.add_argument(\u0027milestone\u0027, type\u003dstr, help\u003d\u0027The release milestone\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_7f6d4d98","line":107,"in_reply_to":"9a8ffd7b_c03e1529","updated":"2015-12-01 16:54:19.000000000","message":"(not a -1):  This sentence tripped me up when I read it to but I didn\u0027t say anything.  I figured that you meant that the output from the dashboard creator script could be used to query Gerrit directly.\n\nI do wonder if some better integration with dashboard creator could be helpful but I think that could be tackled in another commit.  I\u0027m thinking of maybe installing dashboard creator as a dependency and importing it and then possibly integrating this with the docs run.  I don\u0027t know, just brainstorming here.  It might be more trouble than its worth but I think we should discuss it separately from this first iteration.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4830064e0f46f7a6dd549f2b73da4a6490015ea7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    f.write(\"foreach \u003d (project:openstack/neutron OR \""},{"line_number":126,"context_line":"            \"project:openstack/python-neutronclient OR \""},{"line_number":127,"context_line":"            \"project:openstack/neutron-specs) status:open NOT owner:self \""},{"line_number":128,"context_line":"            \"NOT label:Workflow\u003c\u003d-1 label:Verified\u003e\u003d1,jenkins \""},{"line_number":129,"context_line":"            \"NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"},{"line_number":130,"context_line":"    f.write(\"\\n\")"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_60d40947","line":128,"updated":"2015-11-30 20:37:43.000000000","message":"(Not a -1) I mentioned it on the ML but I\u0027ll mention it here too.  I wonder if not showing failing Jenkins patches excludes too much.  But, I could be swayed either way.","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"415dc652bc5f2d739b7a85f498952789a6f9a68e","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    f.write(\"foreach \u003d (project:openstack/neutron OR \""},{"line_number":126,"context_line":"            \"project:openstack/python-neutronclient OR \""},{"line_number":127,"context_line":"            \"project:openstack/neutron-specs) status:open NOT owner:self \""},{"line_number":128,"context_line":"            \"NOT label:Workflow\u003c\u003d-1 label:Verified\u003e\u003d1,jenkins \""},{"line_number":129,"context_line":"            \"NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"},{"line_number":130,"context_line":"    f.write(\"\\n\")"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_05bfd4aa","line":128,"in_reply_to":"9a8ffd7b_60d40947","updated":"2015-12-02 16:49:03.000000000","message":"I will remove it, agreed, it filters too much probably","commit_id":"94b52df6c1bf117830bacb50c25dd7dfb94d8114"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"37c084e37f4e6e667d0d8fe9ede019934efd5675","unresolved":false,"context_lines":[{"line_number":101,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""},{"line_number":102,"context_line":"launchpad \u003d Launchpad.login_anonymously(\u0027just testing\u0027, \u0027production\u0027, cachedir,"},{"line_number":103,"context_line":"                                        version\u003d\"devel\")"},{"line_number":104,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":105,"context_line":"if not is_milestone_valid(neutron, milestone):"},{"line_number":106,"context_line":"    sys.exit()"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_e257a0c8","line":104,"updated":"2015-12-03 19:39:01.000000000","message":"what about the client? We always forget about the client!","commit_id":"140a6333a20fca01c27974711c64d0df3ebf466d"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"51a203718b91daecfd687fe67f3ffc0cc3ca6094","unresolved":false,"context_lines":[{"line_number":101,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""},{"line_number":102,"context_line":"launchpad \u003d Launchpad.login_anonymously(\u0027just testing\u0027, \u0027production\u0027, cachedir,"},{"line_number":103,"context_line":"                                        version\u003d\"devel\")"},{"line_number":104,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":105,"context_line":"if not is_milestone_valid(neutron, milestone):"},{"line_number":106,"context_line":"    sys.exit()"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_4303fa42","line":104,"in_reply_to":"7a740942_c64e26c1","updated":"2015-12-04 10:30:10.000000000","message":"added the client and modified the code a bit","commit_id":"140a6333a20fca01c27974711c64d0df3ebf466d"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"8a70a13cbe52a1c15e98b1c140d255edd9e33442","unresolved":false,"context_lines":[{"line_number":101,"context_line":"cachedir \u003d \"~/.launchpadlib/cache/\""},{"line_number":102,"context_line":"launchpad \u003d Launchpad.login_anonymously(\u0027just testing\u0027, \u0027production\u0027, cachedir,"},{"line_number":103,"context_line":"                                        version\u003d\"devel\")"},{"line_number":104,"context_line":"neutron \u003d launchpad.projects[\u0027neutron\u0027]"},{"line_number":105,"context_line":"if not is_milestone_valid(neutron, milestone):"},{"line_number":106,"context_line":"    sys.exit()"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_c64e26c1","line":104,"in_reply_to":"7a740942_e257a0c8","updated":"2015-12-04 03:19:18.000000000","message":"How about passing project name as argument? I believe it\u0027s useful.","commit_id":"140a6333a20fca01c27974711c64d0df3ebf466d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b02002f51b591d65d7aaf7553aaf03cda2cddbe8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    f.write(title)"},{"line_number":111,"context_line":"    f.write(\"description \u003d Review Inbox\\n\")"},{"line_number":112,"context_line":"    f.write(\"foreach \u003d (project:openstack/neutron OR \""},{"line_number":113,"context_line":"            \"project:openstack/python-neutronclient OR \""},{"line_number":114,"context_line":"            \"project:openstack/neutron-specs) status:open NOT owner:self \""},{"line_number":115,"context_line":"            \"NOT label:Workflow\u003c\u003d-1 \""},{"line_number":116,"context_line":"            \"NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_27d924f4","line":113,"updated":"2015-12-04 05:44:49.000000000","message":"we currently track specs and bugs for fwaas, lbaas, and vpnaas in the same LP project (neutron). Should this foreach be extended to those too?","commit_id":"140a6333a20fca01c27974711c64d0df3ebf466d"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"51a203718b91daecfd687fe67f3ffc0cc3ca6094","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    f.write(title)"},{"line_number":111,"context_line":"    f.write(\"description \u003d Review Inbox\\n\")"},{"line_number":112,"context_line":"    f.write(\"foreach \u003d (project:openstack/neutron OR \""},{"line_number":113,"context_line":"            \"project:openstack/python-neutronclient OR \""},{"line_number":114,"context_line":"            \"project:openstack/neutron-specs) status:open NOT owner:self \""},{"line_number":115,"context_line":"            \"NOT label:Workflow\u003c\u003d-1 \""},{"line_number":116,"context_line":"            \"NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_c395aae4","line":113,"in_reply_to":"7a740942_27d924f4","updated":"2015-12-04 10:30:10.000000000","message":"agreed","commit_id":"140a6333a20fca01c27974711c64d0df3ebf466d"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"1ca019fc3efa7bfde6507db89a7b51a47f825268","unresolved":false,"context_lines":[{"line_number":102,"context_line":"parser \u003d argparse.ArgumentParser("},{"line_number":103,"context_line":"    description\u003d\u0027Create dashboard for critical/high bugs, approved rfe and\u0027"},{"line_number":104,"context_line":"                \u0027 blueprints. A .dash file will be created in the current\u0027"},{"line_number":105,"context_line":"                \u0027 folder that you can serve as input for gerrit-dash-creator.\u0027"},{"line_number":106,"context_line":"                \u0027 The output of the script can be used to query Gerrit\u0027"},{"line_number":107,"context_line":"                \u0027 directly.\u0027)"},{"line_number":108,"context_line":"parser.add_argument(\u0027milestone\u0027, type\u003dstr, help\u003d\u0027The release milestone\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_830f7ee0","line":105,"updated":"2015-12-04 23:55:25.000000000","message":"nit: The phrase \"you can server\" seems a little weird unless the intent is to install this script as a web service or something, but this is a total nit. If this script is intended as general purpose I think \"you can use\" would make more sense.","commit_id":"0d06435860b37b4088db9c9b218bf00e9b5d5257"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"1ca019fc3efa7bfde6507db89a7b51a47f825268","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            \"project:openstack/neutron-lbaas OR \""},{"line_number":135,"context_line":"            \"project:openstack/neutron-vpnaas) status:open NOT owner:self \""},{"line_number":136,"context_line":"            \"NOT label:Workflow\u003c\u003d-1 \""},{"line_number":137,"context_line":"            \"NOT label:Code-Review\u003e\u003d-2,self branch:master\\n\")"},{"line_number":138,"context_line":"    f.write(\"\\n\")"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    print(\"Querying Launchpad, this might take a while...\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_43e8b6e2","line":137,"updated":"2015-12-04 23:55:25.000000000","message":"It could be my own ignorance, but isn\u0027t Code-Review always greater than or equal to -2? How would a Code-Review of less than -2 ever occur?","commit_id":"0d06435860b37b4088db9c9b218bf00e9b5d5257"}]}
