)]}'
{"horizon/static/horizon/js/angular/services/hz.api.nova.js":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"1707af9a36c8c7d9736df27c333135d77faaf93e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        });"},{"line_number":33,"context_line":"    };"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    // AvailabilityZones"},{"line_number":36,"context_line":"    this.getAvailabilityZones \u003d function() {"},{"line_number":37,"context_line":"      return apiService.get(\u0027/api/nova/availzones/\u0027)"},{"line_number":38,"context_line":"        .error(function () {"}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_82ef8bb0","line":35,"updated":"2015-02-11 00:22:47.000000000","message":"two words","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"a13e3927d4a08a1104c74b3aa140e674d8438f9b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        });"},{"line_number":33,"context_line":"    };"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    // AvailabilityZones"},{"line_number":36,"context_line":"    this.getAvailabilityZones \u003d function() {"},{"line_number":37,"context_line":"      return apiService.get(\u0027/api/nova/availzones/\u0027)"},{"line_number":38,"context_line":"        .error(function () {"}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_056c85cf","line":35,"in_reply_to":"da86d52c_82ef8bb0","updated":"2015-02-11 00:26:42.000000000","message":"Done","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"1707af9a36c8c7d9736df27c333135d77faaf93e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"      return apiService.get(\u0027/api/nova/availzones/\u0027)"},{"line_number":38,"context_line":"        .error(function () {"},{"line_number":39,"context_line":"          horizon.alert(\u0027error\u0027,"},{"line_number":40,"context_line":"                        gettext(\u0027Unable to retrieve availability zones\u0027));"},{"line_number":41,"context_line":"        });"},{"line_number":42,"context_line":"    };"},{"line_number":43,"context_line":""}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_e20a0789","line":40,"updated":"2015-02-11 00:22:47.000000000","message":"need period","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"a13e3927d4a08a1104c74b3aa140e674d8438f9b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"      return apiService.get(\u0027/api/nova/availzones/\u0027)"},{"line_number":38,"context_line":"        .error(function () {"},{"line_number":39,"context_line":"          horizon.alert(\u0027error\u0027,"},{"line_number":40,"context_line":"                        gettext(\u0027Unable to retrieve availability zones\u0027));"},{"line_number":41,"context_line":"        });"},{"line_number":42,"context_line":"    };"},{"line_number":43,"context_line":""}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_257189a8","line":40,"in_reply_to":"da86d52c_e20a0789","updated":"2015-02-11 00:26:42.000000000","message":"Done","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"1707af9a36c8c7d9736df27c333135d77faaf93e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    this.getLimits \u003d function() {"},{"line_number":46,"context_line":"      return apiService.get(\u0027/api/nova/limits/\u0027)"},{"line_number":47,"context_line":"        .error(function () {"},{"line_number":48,"context_line":"          horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve limits\u0027));"},{"line_number":49,"context_line":"        });"},{"line_number":50,"context_line":"    };"},{"line_number":51,"context_line":""}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_22017f6a","line":48,"updated":"2015-02-11 00:22:47.000000000","message":"need period","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"a13e3927d4a08a1104c74b3aa140e674d8438f9b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    this.getLimits \u003d function() {"},{"line_number":46,"context_line":"      return apiService.get(\u0027/api/nova/limits/\u0027)"},{"line_number":47,"context_line":"        .error(function () {"},{"line_number":48,"context_line":"          horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve limits\u0027));"},{"line_number":49,"context_line":"        });"},{"line_number":50,"context_line":"    };"},{"line_number":51,"context_line":""}],"source_content_type":"text/javascript","patch_set":29,"id":"da86d52c_45691dbd","line":48,"in_reply_to":"da86d52c_22017f6a","updated":"2015-02-11 00:26:42.000000000","message":"Done","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"79fe169e8289af78e8981c20f8cf7ccbbee68571","unresolved":false,"context_lines":[{"line_number":15,"context_line":"*/"},{"line_number":16,"context_line":"/*global angular,horizon*/"},{"line_number":17,"context_line":"(function () {"},{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":"  function NovaAPI(apiService) {"},{"line_number":20,"context_line":"    // Keypairs"},{"line_number":21,"context_line":"    this.getKeypairs \u003d function() {"}],"source_content_type":"text/javascript","patch_set":36,"id":"da86d52c_0d374300","line":18,"updated":"2015-02-18 04:36:13.000000000","message":"ngdoc is being added on the angular widgets that have already merged.","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"a4af5898e4abdd447adfb7673eb113aa94ca6bb4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"*/"},{"line_number":16,"context_line":"/*global angular,horizon*/"},{"line_number":17,"context_line":"(function () {"},{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":"  function NovaAPI(apiService) {"},{"line_number":20,"context_line":"    // Keypairs"},{"line_number":21,"context_line":"    this.getKeypairs \u003d function() {"}],"source_content_type":"text/javascript","patch_set":36,"id":"da86d52c_f2ae2ce6","line":18,"in_reply_to":"da86d52c_0d374300","updated":"2015-02-18 19:21:40.000000000","message":"Done","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"142554d2b634a062479382a8ede60e847f4e88d2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"     /**"},{"line_number":30,"context_line":"      * @name hz.api.novaAPI.getKeypairs"},{"line_number":31,"context_line":"      * @description"},{"line_number":32,"context_line":"      * Get a list of keypairs."},{"line_number":33,"context_line":"      *"},{"line_number":34,"context_line":"      * The listing result is an object with property \"items\". Each item is"},{"line_number":35,"context_line":"      * a keypair."}],"source_content_type":"text/javascript","patch_set":40,"id":"da86d52c_e5401f37","line":32,"updated":"2015-02-18 21:47:08.000000000","message":"Is it getting a object contains a list, or the list directly? From the description bellow, it seems that is return an object.","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"142554d2b634a062479382a8ede60e847f4e88d2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"      * Get a list of Availability Zones."},{"line_number":71,"context_line":"      *"},{"line_number":72,"context_line":"      * The listing result is an object with property \"items\". Each item is"},{"line_number":73,"context_line":"      * an availability zone."},{"line_number":74,"context_line":"      */"},{"line_number":75,"context_line":"    this.getAvailabilityZones \u003d function() {"},{"line_number":76,"context_line":"      return apiService.get(\u0027/api/nova/availzones/\u0027)"}],"source_content_type":"text/javascript","patch_set":40,"id":"da86d52c_02d8c9ed","line":73,"updated":"2015-02-18 21:47:08.000000000","message":"It will be helpful if we could have an example to show the data structure of the returned data.","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"142554d2b634a062479382a8ede60e847f4e88d2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"     * This returns the new server object on success."},{"line_number":140,"context_line":"     */"},{"line_number":141,"context_line":"    this.createServer \u003d function(newServer) {"},{"line_number":142,"context_line":"      return apiService.post(\u0027/api/nova/servers/\u0027, newServer)"},{"line_number":143,"context_line":"        .error(function () {"},{"line_number":144,"context_line":"          horizon.alert(\u0027error\u0027, gettext(\u0027Unable to create the server.\u0027));"},{"line_number":145,"context_line":"        });"}],"source_content_type":"text/javascript","patch_set":40,"id":"da86d52c_e22495c7","line":142,"updated":"2015-02-18 21:47:08.000000000","message":"Minor, not a blocker.\n\nCan we rename `newServer` to `newServerSpec`? newServer looks like the server itself, actually I was confused. The same is to newKeypair above.","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"}],"openstack_dashboard/api/glance.py":[{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"f38ebb68ee123434fec273f29255bb954b44c962","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def image_list_detailed(request, marker\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":63,"context_line":"                        sort_key\u003d\u0027created_at\u0027, filters\u003d{}, paginate\u003dFalse,"},{"line_number":64,"context_line":"                        **kwargs):"},{"line_number":65,"context_line":"    limit \u003d getattr(settings, \u0027API_RESULT_LIMIT\u0027, 1000)"},{"line_number":66,"context_line":"    page_size \u003d utils.get_page_size(request)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_bd7500ce","line":63,"updated":"2014-12-16 01:27:10.000000000","message":"I\u0027m not sure the rationale behind this change, and any code with a default argument that is mutable is opening itself up to bizarro bugs.","commit_id":"95ae5e902408d18e7583ec99c176a51af7965c8d"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"8f59b11919592685cbb051d37a58b55ecb603b11","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def image_list_detailed(request, marker\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":63,"context_line":"                        sort_key\u003d\u0027created_at\u0027, filters\u003d{}, paginate\u003dFalse,"},{"line_number":64,"context_line":"                        **kwargs):"},{"line_number":65,"context_line":"    limit \u003d getattr(settings, \u0027API_RESULT_LIMIT\u0027, 1000)"},{"line_number":66,"context_line":"    page_size \u003d utils.get_page_size(request)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_a13a3ae5","line":63,"in_reply_to":"3a961159_bd7500ce","updated":"2014-12-16 05:16:47.000000000","message":"The client itself takes in kwargs and this interface is actually blocking some of the functionality from getting through to the client.  So, rather than add explicit support here and in the rest API, just opened it up for passthrough.\n\nI\u0027d like to learn more about the bizarro bugs possibility though.  Can you explain further?","commit_id":"95ae5e902408d18e7583ec99c176a51af7965c8d"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"9ca31ac857da5555b1c7357a84f76e50c195aefd","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def image_list_detailed(request, marker\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":64,"context_line":"                        sort_key\u003d\u0027created_at\u0027, filters\u003d{}, paginate\u003dFalse,"},{"line_number":65,"context_line":"                        **kwargs):"},{"line_number":66,"context_line":"    limit \u003d getattr(settings, \u0027API_RESULT_LIMIT\u0027, 1000)"},{"line_number":67,"context_line":"    page_size \u003d utils.get_page_size(request)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_555e1014","line":64,"updated":"2015-01-07 00:51:34.000000000","message":"There is a known issue in python where you don\u0027t want to default args to a static dictionary.\n\nThe previous code handles it correctly I believe.\n\nLet me know if I got this wrong.","commit_id":"55bd19ee76bd2ac7e3789b2f75a6592ee2c8f862"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"880015a32e76f644ea955967b94b58c079141e57","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def image_list_detailed(request, marker\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":64,"context_line":"                        sort_key\u003d\u0027created_at\u0027, filters\u003d{}, paginate\u003dFalse,"},{"line_number":65,"context_line":"                        **kwargs):"},{"line_number":66,"context_line":"    limit \u003d getattr(settings, \u0027API_RESULT_LIMIT\u0027, 1000)"},{"line_number":67,"context_line":"    page_size \u003d utils.get_page_size(request)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_06ce2083","line":64,"in_reply_to":"3a961159_555e1014","updated":"2015-01-07 04:46:23.000000000","message":"Done","commit_id":"55bd19ee76bd2ac7e3789b2f75a6592ee2c8f862"},{"author":{"_account_id":11798,"name":"Michael Hagedorn","email":"mike.hagedorn@hpe.com","username":"mwhagedorn"},"change_message_id":"a5b2c051799fccd428d2b42163226a0c95c5e5e3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        request_size \u003d limit"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    kwargs[\u0027filters\u0027] \u003d filters or {}"},{"line_number":75,"context_line":"    if marker:"},{"line_number":76,"context_line":"        kwargs[\u0027marker\u0027] \u003d marker"},{"line_number":77,"context_line":"    kwargs[\u0027sort_dir\u0027] \u003d sort_dir"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_cc06cb1b","line":74,"updated":"2015-01-08 14:50:29.000000000","message":"Why is there a param \u0027filters\" as well as a keyword \u0027filters\".  Shouldnt we be consistent?","commit_id":"3b1b7b1365b18b2e17fce647af9e6f8aa31f209d"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"ee38a9a0935166d479b07d160c59d4ed59b660d2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    else:"},{"line_number":72,"context_line":"        request_size \u003d limit"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    kwargs[\u0027filters\u0027] \u003d filters or {}"},{"line_number":75,"context_line":"    if marker:"},{"line_number":76,"context_line":"        kwargs[\u0027marker\u0027] \u003d marker"},{"line_number":77,"context_line":"    kwargs[\u0027sort_dir\u0027] \u003d sort_dir"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_e8813890","line":74,"in_reply_to":"3a961159_cc06cb1b","updated":"2015-01-23 01:34:16.000000000","message":"The v1 python-glanceclient API is rather confusing. It actually seems as though \"filters\" was an afterthought to the v1 client, because they made it much more streamlined in v2. \n\nIt looks for a \"filters\" dict as a specific element in the kwargs passed to it and differentiates between things that are filters and things that are keyword args.  Legacy horizon only supported filters and did not support passing additional kwargs other than those specifically set with defaults in the function signature.  It did however support passing filters.\n\nIn order to just completely use kwargs (and get rid of filters as a separate argument), I\u0027d have to refactor everywhere this function is called in legacy horizon code. Initially, I am just looking to enable pass through of additional keyword args from the rest client, even though the rest of horizon doesn\u0027t use them. Otherwise, would need to refactor all of the existing horizon usages of this function call. \n\ne.g: the following URL:\n\nhttp://localhost:8001/api/glance/v1.0/images?name\u003dmysql\u0026sort_dir\u003dasc\u0026sort_key\u003dname\u0026marker\u003d\u0026paginate\u003dTrue\u0026min_disk\u003d0\u0026is_public\u003dtrue\u0026property-os_shutdown_timeout\u003d1\n\nBecomes the following kwargs that are actually passed to the v1 client:\n\n{\n    \u0027is_public\u0027: u\u0027true\u0027,\n    \u0027sort_key\u0027: u\u0027name\u0027,\n    \u0027sort_dir\u0027: u\u0027asc\u0027,\n    \u0027filters\u0027: {\n        u\u0027min_disk\u0027: u\u00270\u0027,\n        u\u0027name\u0027: u\u0027mysql\u0027,\n        \u0027properties\u0027: {\n            u\u0027os_shutdown_timeout\u0027: u\u00271\u0027\n        }\n    }\n}","commit_id":"3b1b7b1365b18b2e17fce647af9e6f8aa31f209d"},{"author":{"_account_id":8627,"name":"Chris Johnson","email":"wchrisjohnson@gmail.com","username":"wchrisjohnson"},"change_message_id":"24794511dc8937b121c1b86cd8c091fe4587459d","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    images_iter \u003d glanceclient(request).images.list(page_size\u003drequest_size,"},{"line_number":81,"context_line":"                                                    limit\u003dlimit,"},{"line_number":82,"context_line":"                                                    **kwargs)"},{"line_number":83,"context_line":"    has_prev_data \u003d False"},{"line_number":84,"context_line":"    has_more_data \u003d False"},{"line_number":85,"context_line":"    if paginate:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_5b57cf5a","line":82,"updated":"2015-01-09 16:47:56.000000000","message":"Can we refactor/DRY up the code here and at lines 231-252 into a single method?","commit_id":"3b1b7b1365b18b2e17fce647af9e6f8aa31f209d"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"ee38a9a0935166d479b07d160c59d4ed59b660d2","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    images_iter \u003d glanceclient(request).images.list(page_size\u003drequest_size,"},{"line_number":81,"context_line":"                                                    limit\u003dlimit,"},{"line_number":82,"context_line":"                                                    **kwargs)"},{"line_number":83,"context_line":"    has_prev_data \u003d False"},{"line_number":84,"context_line":"    has_more_data \u003d False"},{"line_number":85,"context_line":"    if paginate:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_2300c300","line":82,"in_reply_to":"3a961159_5b57cf5a","updated":"2015-01-23 01:34:16.000000000","message":"Yes, can in a subsequent commit.  VERY important to notice that in addition to the iterator \"type\" being diff, the sort_dir is asc vs desc between the two loops.  The namespaces iterate on name rather than on create time, because most of them are inserted in a single transaction resulting in the update time being identical.  Since this code does NOT use a secondary sort key, it ends up in semi random looking sorting.","commit_id":"3b1b7b1365b18b2e17fce647af9e6f8aa31f209d"},{"author":{"_account_id":8627,"name":"Chris Johnson","email":"wchrisjohnson@gmail.com","username":"wchrisjohnson"},"change_message_id":"24794511dc8937b121c1b86cd8c091fe4587459d","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    kwargs[\u0027sort_key\u0027] \u003d sort_key"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    namespaces_iter \u003d glanceclient(request, \u00272\u0027).metadefs_namespace.list("},{"line_number":230,"context_line":"        page_size\u003drequest_size, limit\u003dlimit, **kwargs)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    has_prev_data \u003d False"},{"line_number":233,"context_line":"    has_more_data \u003d False"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1bc4670d","line":230,"updated":"2015-01-09 16:47:56.000000000","message":"Can we refactor/DRY up the code here and at lines 82-101 into a single method?","commit_id":"3b1b7b1365b18b2e17fce647af9e6f8aa31f209d"}],"openstack_dashboard/api/rest/__init__.py":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"79fe169e8289af78e8981c20f8cf7ccbbee68571","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# import REST API modules here"},{"line_number":25,"context_line":"import nova     #flake8: noqa"},{"line_number":26,"context_line":"import keystone     #flake8: noqa"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_8dffb333","line":25,"updated":"2015-02-18 04:36:13.000000000","message":"nova should come after keystone according to alphabetical order.","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"a4af5898e4abdd447adfb7673eb113aa94ca6bb4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# import REST API modules here"},{"line_number":25,"context_line":"import nova     #flake8: noqa"},{"line_number":26,"context_line":"import keystone     #flake8: noqa"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_325e0414","line":25,"in_reply_to":"da86d52c_8dffb333","updated":"2015-02-18 19:21:40.000000000","message":"Done","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"}],"openstack_dashboard/api/rest/glance.py":[{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"f38ebb68ee123434fec273f29255bb954b44c962","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class ImagesV1(generic.View):"},{"line_number":28,"context_line":"    \"\"\"API for Glance images."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    url_regex \u003d r\u0027glance/v1.0/images/$\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @rest_utils.ajax()"},{"line_number":33,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_3d8e7028","line":30,"updated":"2014-12-16 01:27:10.000000000","message":"Exposing versioning like this is typically done to allow backwards compatibility with clients, but since we control the only client in this instance, this seems unnecessary to me.","commit_id":"95ae5e902408d18e7583ec99c176a51af7965c8d"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"8f59b11919592685cbb051d37a58b55ecb603b11","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class ImagesV1(generic.View):"},{"line_number":28,"context_line":"    \"\"\"API for Glance images."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    url_regex \u003d r\u0027glance/v1.0/images/$\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @rest_utils.ajax()"},{"line_number":33,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_417d16b1","line":30,"in_reply_to":"3a961159_3d8e7028","updated":"2014-12-16 05:16:47.000000000","message":"All of the logic in here is pretty much tailored to the v1 client interface in glance.  It is actually simpler in v2. For example, it the Get request below, properties don\u0027t have to be prefixed.  I think it would be better to have alternate URLs rather than weird if then logic. Also, Tihomir would like to see a REST API that can support adding new versions of the client without a middleman layer. I\u0027m not sure that is possible in a lot of cases, but I want to work further on enabling some of that concept.\n\nThat said, I think I will look at removing v1 support in Horizon all together.  I started down this path to work towards some of the concepts in the mailing list and see what the pitfalls might be.","commit_id":"95ae5e902408d18e7583ec99c176a51af7965c8d"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"9ca31ac857da5555b1c7357a84f76e50c195aefd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        # Obviously no as generic as discussed in mailing list."},{"line_number":49,"context_line":"        # The below probably actually accentuates the irritation of middleware."},{"line_number":50,"context_line":"        # Although, calling it is pretty straightforward. (See URL above)"},{"line_number":51,"context_line":"        "},{"line_number":52,"context_line":"        # Glance v1 client processes some keywords specifically."},{"line_number":53,"context_line":"        # Others, it just takes as a nested dict called filters."},{"line_number":54,"context_line":"        keywords \u003d [\u0027page_size\u0027, \u0027limit\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_15af28e4","line":51,"updated":"2015-01-07 00:51:34.000000000","message":"probably could do without the xtra space","commit_id":"55bd19ee76bd2ac7e3789b2f75a6592ee2c8f862"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"880015a32e76f644ea955967b94b58c079141e57","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        # Obviously no as generic as discussed in mailing list."},{"line_number":49,"context_line":"        # The below probably actually accentuates the irritation of middleware."},{"line_number":50,"context_line":"        # Although, calling it is pretty straightforward. (See URL above)"},{"line_number":51,"context_line":"        "},{"line_number":52,"context_line":"        # Glance v1 client processes some keywords specifically."},{"line_number":53,"context_line":"        # Others, it just takes as a nested dict called filters."},{"line_number":54,"context_line":"        keywords \u003d [\u0027page_size\u0027, \u0027limit\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_0695403f","line":51,"in_reply_to":"3a961159_15af28e4","updated":"2015-01-07 04:46:23.000000000","message":"Done","commit_id":"55bd19ee76bd2ac7e3789b2f75a6592ee2c8f862"}],"openstack_dashboard/api/rest/nova.py":[{"author":{"_account_id":8627,"name":"Chris Johnson","email":"wchrisjohnson@gmail.com","username":"wchrisjohnson"},"change_message_id":"7470de802638775a9f592d531787c6e594275af7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        The listing result is an object with property \"items\"."},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        result \u003d api.nova.keypair_list(request)"},{"line_number":40,"context_line":"        return {\u0027items\u0027: [u.to_dict() for u in result]}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @rest_utils.ajax(method\u003d\u0027POST\u0027)"},{"line_number":43,"context_line":"    def post(self, request):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa81d914_a7edf28d","line":40,"updated":"2015-01-28 04:45:12.000000000","message":"Why is the generic property \u0027items\u0027 used for all of the results returned across all of the APIs defined to date, instead of something more descriptive of what the dict contains, like, in this case, \u0027keypairs\u0027... ?","commit_id":"9de70852b08c4a9607cae41053330538aa821101"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"1707af9a36c8c7d9736df27c333135d77faaf93e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"class Limits(generic.View):"},{"line_number":86,"context_line":"    \"\"\"API for nova limits."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":"    url_regex \u003d r\u0027nova/limits$\u0027"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @rest_utils.ajax()"},{"line_number":91,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_c2dee310","line":88,"updated":"2015-02-11 00:22:47.000000000","message":"missing \u0027/\u0027","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"a13e3927d4a08a1104c74b3aa140e674d8438f9b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"class Limits(generic.View):"},{"line_number":86,"context_line":"    \"\"\"API for nova limits."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":"    url_regex \u003d r\u0027nova/limits$\u0027"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @rest_utils.ajax()"},{"line_number":91,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_e5a131f9","line":88,"in_reply_to":"da86d52c_c2dee310","updated":"2015-02-11 00:26:42.000000000","message":"Done","commit_id":"c2c0bc16fa9ff11b29e9accc1017e069ac41e961"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"acef67101c41a4be9a7c0fee33968fe908cb6c31","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        The GET parameter \u0027reserved\u0027 may be set to \"true\" but it\u0027s not"},{"line_number":98,"context_line":"        clear what the result of that is."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        The listing result is an object with property \"items\"."},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        reserved \u003d request.GET.get(\u0027reserved\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":103,"context_line":"        result \u003d api.nova.tenant_absolute_limits(request, reserved)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_45e83de2","line":100,"updated":"2015-02-11 00:41:13.000000000","message":"inaccurate","commit_id":"df5fdcd1106929150fa43dfde0f7555064674bc0"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"d981f3acfa04e5ad1d8540a8eb01ffd9899caa26","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        The GET parameter \u0027reserved\u0027 may be set to \"true\" but it\u0027s not"},{"line_number":98,"context_line":"        clear what the result of that is."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        The listing result is an object with property \"items\"."},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        reserved \u003d request.GET.get(\u0027reserved\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":103,"context_line":"        result \u003d api.nova.tenant_absolute_limits(request, reserved)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_3612a109","line":100,"in_reply_to":"da86d52c_45e83de2","updated":"2015-02-11 03:11:06.000000000","message":"Done","commit_id":"df5fdcd1106929150fa43dfde0f7555064674bc0"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"acef67101c41a4be9a7c0fee33968fe908cb6c31","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        reserved \u003d request.GET.get(\u0027reserved\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":103,"context_line":"        result \u003d api.nova.tenant_absolute_limits(request, reserved)"},{"line_number":104,"context_line":"        return result.to_dict()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"@urls.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_a54f3933","line":104,"updated":"2015-02-11 00:41:13.000000000","message":"to_dict() doesn\u0027t work here, result already contains {a: 1, b: 2, c: 3}","commit_id":"df5fdcd1106929150fa43dfde0f7555064674bc0"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"d981f3acfa04e5ad1d8540a8eb01ffd9899caa26","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        reserved \u003d request.GET.get(\u0027reserved\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":103,"context_line":"        result \u003d api.nova.tenant_absolute_limits(request, reserved)"},{"line_number":104,"context_line":"        return result.to_dict()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"@urls.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_56fab5bd","line":104,"in_reply_to":"da86d52c_a54f3933","updated":"2015-02-11 03:11:06.000000000","message":"Done","commit_id":"df5fdcd1106929150fa43dfde0f7555064674bc0"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"79fe169e8289af78e8981c20f8cf7ccbbee68571","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            args \u003d ("},{"line_number":140,"context_line":"                request,"},{"line_number":141,"context_line":"                request.DATA[\u0027name\u0027],"},{"line_number":142,"context_line":"                request.DATA[\u0027image_id\u0027],"},{"line_number":143,"context_line":"                request.DATA[\u0027flavor_id\u0027],"},{"line_number":144,"context_line":"                request.DATA[\u0027key_name\u0027],"},{"line_number":145,"context_line":"                request.DATA[\u0027user_data\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_30a2a0fc","line":142,"updated":"2015-02-18 04:36:13.000000000","message":"I think we should change image_id to be source id.  image_id is just legacy term since I don\u0027t believe Nova originally allowed booting from volume.\n\nIf you look at the existing create instance code, it is doing the same (remaps image id to source id).\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py#L863\n\nhttp://www.rackspace.com/knowledge_center/article/boot-a-server-from-a-cloud-block-storage-volume","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"a4af5898e4abdd447adfb7673eb113aa94ca6bb4","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            args \u003d ("},{"line_number":140,"context_line":"                request,"},{"line_number":141,"context_line":"                request.DATA[\u0027name\u0027],"},{"line_number":142,"context_line":"                request.DATA[\u0027image_id\u0027],"},{"line_number":143,"context_line":"                request.DATA[\u0027flavor_id\u0027],"},{"line_number":144,"context_line":"                request.DATA[\u0027key_name\u0027],"},{"line_number":145,"context_line":"                request.DATA[\u0027user_data\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_729b1cc9","line":142,"in_reply_to":"da86d52c_30a2a0fc","updated":"2015-02-18 19:21:40.000000000","message":"Done","commit_id":"2a568a031d2c1ad3e18008fb5cc6c32d8b5fb751"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e3d4e93de9f764b450a0fd54b46cf3a77fb7153b","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack_dashboard import api"},{"line_number":21,"context_line":"from openstack_dashboard.api.rest import utils as rest_utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.api.rest import urls"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_e05d6d49","line":22,"updated":"2015-02-18 22:41:28.000000000","message":"NIT: remove the space, the imports should be grouped together","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"4a95069410bfb4421b12fb024e8d7df3e624c690","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack_dashboard import api"},{"line_number":21,"context_line":"from openstack_dashboard.api.rest import utils as rest_utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.api.rest import urls"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_564d2371","line":22,"in_reply_to":"da86d52c_e05d6d49","updated":"2015-02-18 22:51:01.000000000","message":"Done","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"7b757ad229972fbd887273601ffd143741716231","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \"\"\"Create a keypair."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        Create a keypair using the parameters supplied in the POST"},{"line_number":47,"context_line":"        application/json object. The required parameter is \"name\" (string) and"},{"line_number":48,"context_line":"        optionally a key may be imported using the \"public_key\" (string)"},{"line_number":49,"context_line":"        parameter."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_f63617e6","line":47,"updated":"2015-02-18 22:49:52.000000000","message":"as mentioned in IRC, would be good to follow format set in glance API for params for readibility: https://review.openstack.org/#/c/151468/34/openstack_dashboard/api/rest/glance.py L80","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e3d4e93de9f764b450a0fd54b46cf3a77fb7153b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            new \u003d api.nova.keypair_create(request, request.DATA[\u0027name\u0027])"},{"line_number":58,"context_line":"        return rest_utils.CreatedResponse("},{"line_number":59,"context_line":"            \u0027/api/nova/keypairs/%s\u0027 % new.name,"},{"line_number":60,"context_line":"            new.to_dict()"},{"line_number":61,"context_line":"        )"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_3b16d849","line":59,"updated":"2015-02-18 22:41:28.000000000","message":"the name probably need to be escaped with url encode function","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"4a95069410bfb4421b12fb024e8d7df3e624c690","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            new \u003d api.nova.keypair_create(request, request.DATA[\u0027name\u0027])"},{"line_number":58,"context_line":"        return rest_utils.CreatedResponse("},{"line_number":59,"context_line":"            \u0027/api/nova/keypairs/%s\u0027 % new.name,"},{"line_number":60,"context_line":"            new.to_dict()"},{"line_number":61,"context_line":"        )"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_36442f46","line":59,"in_reply_to":"da86d52c_3b16d849","updated":"2015-02-18 22:51:01.000000000","message":"Done","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e3d4e93de9f764b450a0fd54b46cf3a77fb7153b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                kw[name] \u003d request.DATA[name]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        new \u003d api.nova.server_create(*args, **kw)"},{"line_number":157,"context_line":"        return rest_utils.CreatedResponse(\u0027/api/nova/servers/%s\u0027 % new.id,"},{"line_number":158,"context_line":"                                          new.to_dict())"}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_1bf83449","line":157,"updated":"2015-02-18 22:41:28.000000000","message":"encode the id here too","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"4a95069410bfb4421b12fb024e8d7df3e624c690","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                kw[name] \u003d request.DATA[name]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        new \u003d api.nova.server_create(*args, **kw)"},{"line_number":157,"context_line":"        return rest_utils.CreatedResponse(\u0027/api/nova/servers/%s\u0027 % new.id,"},{"line_number":158,"context_line":"                                          new.to_dict())"}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_565e03ea","line":157,"in_reply_to":"da86d52c_1bf83449","updated":"2015-02-18 22:51:01.000000000","message":"Done","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"}],"openstack_dashboard/test/api_tests/nova_rest_tests.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e3d4e93de9f764b450a0fd54b46cf3a77fb7153b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":"import unittest2"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.conf import settings"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_7be210d6","line":15,"updated":"2015-02-18 22:41:28.000000000","message":"should be using testtools instead","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e3d4e93de9f764b450a0fd54b46cf3a77fb7153b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from openstack_dashboard.api.rest import nova"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NovaRestTestCase(unittest2.TestCase):"}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_3b4258ab","line":21,"updated":"2015-02-18 22:41:28.000000000","message":"can we have absolute path here? I think we do try to avoid relative path","commit_id":"4fb84a07cf8582fa72f379f2bda0994223497b8b"}]}
