)]}'
{"tools/count_blueprints.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5e395b05b9e03e4d8c1e80fa9d8db3c1fe1cf3fb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        description\u003d\u0027Count blueprints for a given release. Requires requests \u0027"},{"line_number":22,"context_line":"                    \u0027to be installed.\u0027)"},{"line_number":23,"context_line":"    parser.add_argument(\u0027release\u0027, help\u003d\u0027The release to process.\u0027,"},{"line_number":24,"context_line":"                        choices\u003d[\u0027juno\u0027,"},{"line_number":25,"context_line":"                                 \u0027kilo\u0027,"},{"line_number":26,"context_line":"                                 \u0027liberty\u0027,"},{"line_number":27,"context_line":"                                 \u0027mitaka\u0027,"},{"line_number":28,"context_line":"                                 \u0027newton\u0027,"},{"line_number":29,"context_line":"                                 \u0027ocata\u0027,"},{"line_number":30,"context_line":"                                 \u0027pike\u0027,"},{"line_number":31,"context_line":"                                 \u0027queens\u0027,"},{"line_number":32,"context_line":"                                 \u0027rocky\u0027])"},{"line_number":33,"context_line":"    return parser.parse_args()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c7e9c17f","line":32,"range":{"start_line":24,"start_character":32,"end_line":32,"end_character":41},"updated":"2018-07-12 13:28:05.000000000","message":"If you don\u0027t want to have to respin this every release, pick your favorite:\n\n # Terse, but inefficient\n choices\u003d[x for x in sorted(list(os.walk(\u0027specs\u0027))[0][1]) if x !\u003d \u0027backlog\u0027]\n\n # Slightly less terse, but efficient and still a \"one-liner\"\n choices\u003dsorted([x for x in os.listdir(\u0027specs\u0027) if os.path.isdir(os.path.join(\u0027specs\u0027, x)) and x !\u003d \u0027backlog\u0027])\n\n # Efficient, but more LOC\n for _, choices, _ in os.walk(\u0027specs\u0027):\n     choices.remove(\u0027backlog\u0027)\n     choices.sort()\n     # Quit walking\n     break","commit_id":"5a4c4eff591115eaadb5287e92b870815a9b82aa"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"54f70c85ea045009e1aa788d3c6a0e272580d8c0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        description\u003d\u0027Count blueprints for a given release. Requires requests \u0027"},{"line_number":22,"context_line":"                    \u0027to be installed.\u0027)"},{"line_number":23,"context_line":"    parser.add_argument(\u0027release\u0027, help\u003d\u0027The release to process.\u0027,"},{"line_number":24,"context_line":"                        choices\u003d[\u0027juno\u0027,"},{"line_number":25,"context_line":"                                 \u0027kilo\u0027,"},{"line_number":26,"context_line":"                                 \u0027liberty\u0027,"},{"line_number":27,"context_line":"                                 \u0027mitaka\u0027,"},{"line_number":28,"context_line":"                                 \u0027newton\u0027,"},{"line_number":29,"context_line":"                                 \u0027ocata\u0027,"},{"line_number":30,"context_line":"                                 \u0027pike\u0027,"},{"line_number":31,"context_line":"                                 \u0027queens\u0027,"},{"line_number":32,"context_line":"                                 \u0027rocky\u0027])"},{"line_number":33,"context_line":"    return parser.parse_args()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3eb23606","line":32,"range":{"start_line":24,"start_character":32,"end_line":32,"end_character":41},"in_reply_to":"5f7c97a3_c7e9c17f","updated":"2018-07-21 00:33:47.000000000","message":"Sure, why not. I like option 3.","commit_id":"5a4c4eff591115eaadb5287e92b870815a9b82aa"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07d06afd1067aca28c417472daa5e319da9f5d75","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_11f84de3","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"updated":"2018-08-07 16:09:51.000000000","message":"prefer if these kwargs were named","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"578c59763c0f1250dcc358e14b3d5a3738fbf8b7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_48708fdd","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"in_reply_to":"3f79a3b5_11f84de3","updated":"2018-08-16 17:47:51.000000000","message":"How can you tell if they\u0027re kwargs? This is the same as is shown in the docs:\n\nhttps://help.launchpad.net/API/launchpadlib","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5f49e46b6d4f0e354f7e23cc1933f2ebd09b6e39","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a96b6583","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"in_reply_to":"3f79a3b5_48708fdd","updated":"2018-08-16 19:31:48.000000000","message":"tsk.\n\nI was looking at the source\n\n    def login_anonymously(\n        cls, consumer_name, service_root\u003duris.STAGING_SERVICE_ROOT,\n        launchpadlib_dir\u003dNone, timeout\u003dNone, proxy_info\u003dproxy_info_from_environment,\n        version\u003dDEFAULT_VERSION):","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c469fb23ced27f1b37a730f43fed9056cc27df75","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_18672928","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"in_reply_to":"3f79a3b5_54d4a1bd","updated":"2018-08-17 15:52:32.000000000","message":"Well, I was actually playing around with it in ipython, where you can see the (source code\u0027s) method signature + docstring by using ?, e.g.\n\n In [1]: from launchpadlib import launchpad\n\n In [2]: launchpad.Launchpad.login_anonymously?\n Type:       instancemethod\n String Form:\u003cbound method type.login_anonymously of \u003cclass \u0027launchpadlib.launchpad.Launchpad\u0027\u003e\u003e\n File:       /usr/local/lib/python2.7/dist-packages/launchpadlib/launchpad.py\n Definition: launchpad.Launchpad.login_anonymously(cls, consumer_name, service_root\u003d\u0027https://api.staging.launchpad.net/\u0027, launchpadlib_dir\u003dNone, timeout\u003dNone, proxy_info\u003d\u003cfunction proxy_info_from_environment at 0x7f74ff63dcf8\u003e, version\u003d\u00271.0\u0027)\n Docstring:  Get access to Launchpad without providing any credentials.\n\nAnyway, if the docs don\u0027t show the kwargs (which is what the tsk was about) then I guess there\u0027s no reason to make a big deal out of it.","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ed98793f45cd755d67c26426a774285fe44aa0b9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b44df5c5","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"in_reply_to":"3f79a3b5_a96b6583","updated":"2018-08-16 22:56:32.000000000","message":"Guess I could have fixed this up while I was in there :(","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c3a488d235adea6e2bd69963256acb637bdeefd8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE(melwitt): We have to use the development API because the"},{"line_number":43,"context_line":"    # valid_specifications attribute is not in the v1.0 API."},{"line_number":44,"context_line":"    lp \u003d launchpad.Launchpad.login_anonymously("},{"line_number":45,"context_line":"        \u0027count-specs\u0027, \u0027production\u0027, LPCACHEDIR, version\u003d\u0027devel\u0027)"},{"line_number":46,"context_line":"    lp_nova \u003d lp.projects[\u0027nova\u0027]"},{"line_number":47,"context_line":"    # Valid specifications are specifications that are not obsolete."},{"line_number":48,"context_line":"    blueprints \u003d lp_nova.getSeries(name\u003drelease).valid_specifications"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_54d4a1bd","line":45,"range":{"start_line":45,"start_character":23,"end_line":45,"end_character":48},"in_reply_to":"3f79a3b5_b44df5c5","updated":"2018-08-16 22:59:18.000000000","message":"You still can, if you want. I thought using the example in the documentation was reasonable -- who\u0027s going to look at the source to know these are kwargs? (you)","commit_id":"55f61993c8d0053f24b5b034c10c949e370bfe70"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"af0dd3dc1c7a32dcdb445fdd5be71ce48bacf507","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import argparse"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import lib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def get_options():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f46a8d19","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":10},"updated":"2018-08-16 22:56:15.000000000","message":"I feel like we would normally call this \"utils\" for some reason :)","commit_id":"7e95e6ef493b1bf0cb541fbedd3bc5c58a2221c2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f75fc2d4db7377e6af987bad8953e357f2002cc5","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import argparse"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import lib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def get_options():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d4df51d4","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":10},"in_reply_to":"3f79a3b5_74c51d0a","updated":"2018-08-16 22:59:49.000000000","message":"I\u0027m mostly kidding. I think it\u0027s fine.","commit_id":"7e95e6ef493b1bf0cb541fbedd3bc5c58a2221c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ed67ec408b415b9b07bfc4f2159323fc2c2e4138","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import argparse"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import lib"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def get_options():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_74c51d0a","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":10},"in_reply_to":"3f79a3b5_f46a8d19","updated":"2018-08-16 22:57:20.000000000","message":"Yeah, that would have been a good name. Feel free to change.","commit_id":"7e95e6ef493b1bf0cb541fbedd3bc5c58a2221c2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ed414f85febf2a3e91788ae4d4022d1f900ec33f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            print(\u0027WARNING: Blueprint for spec %s needs approval.\u0027 %"},{"line_number":66,"context_line":"                  spec_fname)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def main():"},{"line_number":70,"context_line":"    opts \u003d get_options()"},{"line_number":71,"context_line":"    count_blueprints(opts.release)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_e429b8f1","line":68,"updated":"2018-10-02 22:39:03.000000000","message":"pep8 le pew","commit_id":"d1ad8aa77a41bac592241bf6330163dcc63506fc"}]}
