)]}'
{"openstack_dashboard/api/rest/heat.py":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"8ef8c283e93dd05659bbb13f05830b10c76dca77","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@urls.register"},{"line_number":29,"context_line":"class Validate(generic.View):"},{"line_number":30,"context_line":"    \"\"\"API for validating a template"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    url_regex \u003d r\u0027heat/validate/$\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_ca02c43e","line":29,"updated":"2015-08-04 00:58:15.000000000","message":"Should it be called Heat?","commit_id":"41b05f8e4517b3ed840dcba3561aeca4c874f2b1"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"63590a712d8c8107ca599e9ba414f9e1e5ab2e70","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@urls.register"},{"line_number":29,"context_line":"class Validate(generic.View):"},{"line_number":30,"context_line":"    \"\"\"API for validating a template"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    url_regex \u003d r\u0027heat/validate/$\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b9299d39","line":29,"in_reply_to":"1a4dcd0f_ca02c43e","updated":"2015-08-04 20:03:17.000000000","message":"No, each rest url endpoint gets its own class. Named after its function. See glance.py in the same directory, for example, has a class Image where you can get the list of images installed. That\u0027s where I initially copied it from.","commit_id":"41b05f8e4517b3ed840dcba3561aeca4c874f2b1"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"0d88a364c2af4759fbc23f5e7c5cdfaed14b564e","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright 2015, Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_962faff5","line":2,"updated":"2015-08-19 13:15:27.000000000","message":"remove, I don\u0027t think you work for HP and can grant this here.","commit_id":"0a95d77ef7eda8e0c31fa3740788c7d69193e18f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"04f5861f6a401770986aa72ce63685624e00ce93","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    url_regex \u003d r\u0027heat/validate/$\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @rest_utils.ajax()"},{"line_number":33,"context_line":"    def get(self, request):"},{"line_number":34,"context_line":"        \"\"\"Validate a template"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        Example GET:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa1b9901_85aa36d1","line":33,"updated":"2015-08-24 20:18:08.000000000","message":"Almost seems to me like this should be a POST, but according to HTTP spec, POST should only be use to create a new resource and all we\u0027re really doing here is validation. Here\u0027s a similar example of POST used for checking policy. https://github.com/openstack/horizon/blob/master/openstack_dashboard/api/rest/policy.py#L30\n\nIn IRC, we agreed that POST might be more consistent since heat is also doing it in a similar manner.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"86dcdf92600ed4ccba9c7612043ac1aa5e4a91bb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    url_regex \u003d r\u0027heat/validate/$\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @rest_utils.ajax()"},{"line_number":33,"context_line":"    def get(self, request):"},{"line_number":34,"context_line":"        \"\"\"Validate a template"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        Example GET:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa1b9901_6b181076","line":33,"in_reply_to":"fa1b9901_85aa36d1","updated":"2015-08-24 22:05:22.000000000","message":"Yeah. I\u0027ll switch to POST.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"}],"openstack_dashboard/dashboards/project/images/images/views.py":[{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"636d37a57de4f346f0045c38c1c610f4ef309800","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    success_url \u003d reverse_lazy(\"horizon:project:images:index\")"},{"line_number":50,"context_line":"    page_title \u003d _(\"Create An Image\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_form_kwargs(self):"},{"line_number":53,"context_line":"        kwargs \u003d super(CreateView, self).get_form_kwargs()"},{"line_number":54,"context_line":"        return kwargs"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_df033ab7","line":52,"updated":"2015-08-18 12:14:11.000000000","message":"is this method really needed? Seems, that it generally does nothing, but calls super or am I wrong here?","commit_id":"9bdcd5d17fb5807d3e8ae3b822231c4217d0aa72"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"16250f188c96372182394ad455a4623bb2d26940","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    success_url \u003d reverse_lazy(\"horizon:project:images:index\")"},{"line_number":50,"context_line":"    page_title \u003d _(\"Create An Image\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_form_kwargs(self):"},{"line_number":53,"context_line":"        kwargs \u003d super(CreateView, self).get_form_kwargs()"},{"line_number":54,"context_line":"        return kwargs"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_492c4a02","line":52,"in_reply_to":"fa1b9901_df033ab7","updated":"2015-08-18 15:43:01.000000000","message":"It seems like it was carry over from when we were figuring out how to make it work. I removed it and tested and your right, its no longer needed. I\u0027ll remove it in the next version. Good catch.","commit_id":"9bdcd5d17fb5807d3e8ae3b822231c4217d0aa72"}],"openstack_dashboard/static/app/core/cloud-services/cloud-services.service.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"04f5861f6a401770986aa72ce63685624e00ce93","unresolved":false,"context_lines":[{"line_number":51,"context_line":"   * be evolving in the coming release and backward compatibility is not"},{"line_number":52,"context_line":"   * guaranteed. This also makes no guarantee that the back-end service"},{"line_number":53,"context_line":"   * is actually enabled."},{"line_number":54,"context_line":"   */"},{"line_number":55,"context_line":"  function cloudServices("},{"line_number":56,"context_line":"    cinderAPI,"},{"line_number":57,"context_line":"    glanceAPI,"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_3777e1a0","line":54,"updated":"2015-08-24 20:18:08.000000000","message":"Should probably rebase your patch on this since cloudservices is going away. https://review.openstack.org/#/c/179516/","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"86dcdf92600ed4ccba9c7612043ac1aa5e4a91bb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"   * be evolving in the coming release and backward compatibility is not"},{"line_number":52,"context_line":"   * guaranteed. This also makes no guarantee that the back-end service"},{"line_number":53,"context_line":"   * is actually enabled."},{"line_number":54,"context_line":"   */"},{"line_number":55,"context_line":"  function cloudServices("},{"line_number":56,"context_line":"    cinderAPI,"},{"line_number":57,"context_line":"    glanceAPI,"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_abd86880","line":54,"in_reply_to":"fa1b9901_3777e1a0","updated":"2015-08-24 22:05:22.000000000","message":"Alternately, I can just drop these changes entirely. I don\u0027t think they are actually used?","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"}],"openstack_dashboard/static/app/core/openstack-service-api/heat.service.js":[{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"3bcedc900f4bc0ae7e102d5efca0f672ad0ec2ba","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     * If passed in, this will not show the default error handling"},{"line_number":45,"context_line":"     * (horizon alert)."},{"line_number":46,"context_line":"     */"},{"line_number":47,"context_line":"    this.validate \u003d function(params, suppressError) {"},{"line_number":48,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":49,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":50,"context_line":"      return suppressError ? promise : promise.error(function() {"}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_e629589c","line":47,"updated":"2015-08-06 15:40:51.000000000","message":"why would you want to supress the error?","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2a30fc1c64f6c45f946f9f90c5e736c1bb780e9c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     * If passed in, this will not show the default error handling"},{"line_number":45,"context_line":"     * (horizon alert)."},{"line_number":46,"context_line":"     */"},{"line_number":47,"context_line":"    this.validate \u003d function(params, suppressError) {"},{"line_number":48,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":49,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":50,"context_line":"      return suppressError ? promise : promise.error(function() {"}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_6cb687fa","line":47,"in_reply_to":"1a4dcd0f_e629589c","updated":"2015-08-06 19:54:09.000000000","message":"Because its used by a javascript function to validate a heat template. Heat throws an error if the template doesn\u0027t validate. So it is a legit thing that the calling function wants to catch the error itself as its trying to programmatically determine if a template is valid or not. Toast\u0027s intended to throw errors up to the user, which is undesirable in this use case.","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"5126775b74ca2bfeeb160d5c1c304dfbd48c2fe9","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.app.core.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.app.core.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"},{"line_number":24,"context_line":"                     \u0027horizon.framework.widgets.toast.service\u0027];"}],"source_content_type":"text/javascript","patch_set":16,"id":"fa1b9901_9e1724ed","line":21,"updated":"2015-08-17 21:03:52.000000000","message":".service to .factory, take a look at https://review.openstack.org/#/c/211782/ for example.","commit_id":"fbe04539a9e83765e5febaae15bd7dba360780e3"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2d263f492f02bda9bb9526a58f7e687df2e9e1b8","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.app.core.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.app.core.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"},{"line_number":24,"context_line":"                     \u0027horizon.framework.widgets.toast.service\u0027];"}],"source_content_type":"text/javascript","patch_set":16,"id":"fa1b9901_14a45355","line":21,"in_reply_to":"fa1b9901_9e1724ed","updated":"2015-08-17 22:09:44.000000000","message":"Done","commit_id":"fbe04539a9e83765e5febaae15bd7dba360780e3"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"5126775b74ca2bfeeb160d5c1c304dfbd48c2fe9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    .module(\u0027horizon.app.core.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.app.core.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"},{"line_number":24,"context_line":"                     \u0027horizon.framework.widgets.toast.service\u0027];"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":16,"id":"fa1b9901_9eee44eb","line":23,"updated":"2015-08-17 21:03:52.000000000","message":"although valid, format should be\n\n  heatAPI.$inject \u003d [\n    ...\n  ];","commit_id":"fbe04539a9e83765e5febaae15bd7dba360780e3"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2d263f492f02bda9bb9526a58f7e687df2e9e1b8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    .module(\u0027horizon.app.core.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.app.core.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"},{"line_number":24,"context_line":"                     \u0027horizon.framework.widgets.toast.service\u0027];"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":16,"id":"fa1b9901_549acb15","line":23,"in_reply_to":"fa1b9901_9eee44eb","updated":"2015-08-17 22:09:44.000000000","message":"Done","commit_id":"fbe04539a9e83765e5febaae15bd7dba360780e3"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"0d88a364c2af4759fbc23f5e7c5cdfaed14b564e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"/*"},{"line_number":2,"context_line":"Copyright 2015, Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"you may not use this file except in compliance with the License."}],"source_content_type":"text/javascript","patch_set":19,"id":"fa1b9901_3684a3d2","line":2,"updated":"2015-08-19 13:15:27.000000000","message":"same with this one.","commit_id":"0a95d77ef7eda8e0c31fa3740788c7d69193e18f"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"04f5861f6a401770986aa72ce63685624e00ce93","unresolved":false,"context_lines":[{"line_number":47,"context_line":"     *"},{"line_number":48,"context_line":"     * @param {boolean} suppressError"},{"line_number":49,"context_line":"     * If passed in, this will not show the default error handling"},{"line_number":50,"context_line":"     * (horizon alert)."},{"line_number":51,"context_line":"     */"},{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_d725455c","line":50,"updated":"2015-08-24 20:18:08.000000000","message":"extra credit to see an example usage and response here as well. see https://github.com/openstack/horizon/blob/master/openstack_dashboard/static/app/core/openstack-service-api/keystone.service.js#L99 for more details.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":17013,"name":"Rajat Vig","email":"rajatv@thoughtworks.com","username":"rajatvig"},"change_message_id":"b1a21d8f003ca4ae4a88c38c6afbf0be63e991bf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_a177c09e","line":55,"updated":"2015-08-20 17:01:15.000000000","message":"Instead of calling the parameter supressError, the intent can be made more explicit by calling it an errorCallback which can be defaulted to the toastService.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":17013,"name":"Rajat Vig","email":"rajatv@thoughtworks.com","username":"rajatvig"},"change_message_id":"c17c14f214ef2af0c6a8ad21cb928a9142dcc792","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_8c467379","line":55,"in_reply_to":"fa1b9901_0cb90315","updated":"2015-08-20 17:34:25.000000000","message":"I\u0027ll remove the -1 but I think if you could rename the variable to \"handleError\" or make it a callback, it\u0027ll work better\n\nI agree it should apply both places. As this work is new, we could establish a better patten here to apply in the glance service as well.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"86dcdf92600ed4ccba9c7612043ac1aa5e4a91bb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_0b82b452","line":55,"in_reply_to":"fa1b9901_3798411b","updated":"2015-08-24 22:05:22.000000000","message":"Ok. We\u0027ll leave it suppressError for now and a new patch set can update all the places its used if a new name is found.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"a268e2377eca56aa2ead2c23e2f36fd594effe8e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_e7bdc802","line":55,"in_reply_to":"fa1b9901_8c467379","updated":"2015-08-20 17:42:26.000000000","message":"I\u0027m ok establishing a better pattern, but probably needs a few folks to decide on what it should be called. Anyone else want to weigh in? handleError? surpressError? Other? I don\u0027t really have a preference.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"76e54205e4ae5376b371ce55e9f17a57e215f107","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_0cb90315","line":55,"in_reply_to":"fa1b9901_a177c09e","updated":"2015-08-20 17:26:04.000000000","message":"I think its more generic to return the promise, because the calling function can then further return the promise or do other things with it, meaning the parent doesn\u0027t necessarily need to know how errors are handled. They can be handled in a much different place.\n\nIt also was copied from glance\u0027s service. So whatever the solution is here, it should probably apply there too.\n\nThoughts?","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"04f5861f6a401770986aa72ce63685624e00ce93","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_3798411b","line":55,"in_reply_to":"fa1b9901_ac53b438","updated":"2015-08-24 20:18:08.000000000","message":"The intent was to provide a way to propagate the promise up so it can be handled differently if an error occurred. For example, I might have a controller that makes multiple REST calls (policy checks, permissions, etc...), but all it really does is create a new user. I may not want to display that policy check failed, so I choose to suppress it, or I can choose to change the error message to fit the scenario a bit better. \n\nThere was some discussion on this a while back, but I can\u0027t seem to locate it. Ultimately, I think we decided on suppress error, but if you strongly feel like it can be clearer, feel free to bring this up in the mailing-list so others can chime in!","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"39c150cb1785c8e7250828bd9f6bf89b20a44d1b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    function validate(params, suppressError) {"},{"line_number":53,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":54,"context_line":"      var promise \u003d apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":55,"context_line":"      return suppressError ? promise : promise.error(function() {"},{"line_number":56,"context_line":"        toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate the template.\u0027));"},{"line_number":57,"context_line":"      });"},{"line_number":58,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_ac53b438","line":55,"in_reply_to":"fa1b9901_e7bdc802","updated":"2015-08-24 14:57:24.000000000","message":"actually suppressError is used in a couple of places across horizon so I would rather use it as is.\n\nhttps://github.com/openstack/horizon/search?utf8\u003d✓\u0026q\u003dsuppressError","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"}],"openstack_dashboard/static/app/core/openstack-service-api/heat.service.spec.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"1022e717b4ded3424ec61b21ce38553d85871bd0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \"data\": \u0027\u0027,"},{"line_number":45,"context_line":"        \"error\": \"Unable to retrieve template.\","},{"line_number":46,"context_line":"        \"testInput\": {"},{"line_number":47,"context_line":"          \"template_url\":\"http://localhost/test.template\""},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"      },"},{"line_number":50,"context_line":"    ];"}],"source_content_type":"text/javascript","patch_set":10,"id":"1a4dcd0f_fd1b8319","line":47,"updated":"2015-08-05 01:53:03.000000000","message":"please be consistent with single quote in the file.","commit_id":"6fb7966bb7a61e5e50302eb99a1496475e6493e8"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"6df5fb598994fe9b63f987dbbecef75180d38d4d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \"data\": \u0027\u0027,"},{"line_number":45,"context_line":"        \"error\": \"Unable to retrieve template.\","},{"line_number":46,"context_line":"        \"testInput\": {"},{"line_number":47,"context_line":"          \"template_url\":\"http://localhost/test.template\""},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"      },"},{"line_number":50,"context_line":"    ];"}],"source_content_type":"text/javascript","patch_set":10,"id":"1a4dcd0f_fdfdc33a","line":47,"in_reply_to":"1a4dcd0f_fd1b8319","updated":"2015-08-05 02:04:06.000000000","message":"Its consistent with the other files in the dir. :/\n\nBut I\u0027ll fix it.","commit_id":"6fb7966bb7a61e5e50302eb99a1496475e6493e8"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"3bcedc900f4bc0ae7e102d5efca0f672ad0ec2ba","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    beforeEach(module(\u0027horizon.app.core.openstack-service-api\u0027));"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    beforeEach(module(function($provide) {"},{"line_number":28,"context_line":"      window.apiTest.initServices($provide, apiService, toastService);"},{"line_number":29,"context_line":"    }));"},{"line_number":30,"context_line":""}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_2995d185","line":27,"updated":"2015-08-06 15:40:51.000000000","message":"here\u0027s an example: https://review.openstack.org/#/c/209106/1/openstack_dashboard/static/app/core/openstack-service-api/cinder.service.spec.js\n\nplease run eslint before submiting your angular patches as to avoid adding new errors. refer to https://github.com/openstack/horizon/blob/master/doc/source/topics/javascript_testing.rst","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2a30fc1c64f6c45f946f9f90c5e736c1bb780e9c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    beforeEach(module(\u0027horizon.app.core.openstack-service-api\u0027));"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    beforeEach(module(function($provide) {"},{"line_number":28,"context_line":"      window.apiTest.initServices($provide, apiService, toastService);"},{"line_number":29,"context_line":"    }));"},{"line_number":30,"context_line":""}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_b7885872","line":27,"in_reply_to":"1a4dcd0f_2995d185","updated":"2015-08-06 19:54:09.000000000","message":"Thanks for the pointer. That would have taken me a long time to figure out.\n\nI made an attempt at this, but it doesn\u0027t seem to work without depending on the parent review of the example:\n\nhttps://review.openstack.org/#/c/209106\n\nand the comments imply its very similar to:\n\nhttps://review.openstack.org/#/c/199333/\n\nWhat should I do? Rebase it onto 199333?","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"}],"openstack_dashboard/static/app/tech-debt/image-form-ctrl.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"0e56d43fcb9ed048bec276dbb7279fc761b01b44","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  angular"},{"line_number":4,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":5,"context_line":"    .controller(\u0027ImageFormCtrl\u0027, [\u0027$scope\u0027, function ($scope) {"},{"line_number":6,"context_line":"      $scope.copyFrom \u003d $(\u0027#id_image_url\u0027).val();"},{"line_number":7,"context_line":"      $scope.diskFormat \u003d $(\u0027#id_disk_format\u0027).val();"},{"line_number":8,"context_line":"      $scope.selectImageFormat \u003d function (path) {"},{"line_number":9,"context_line":"        if (!path) { return; }"}],"source_content_type":"text/javascript","patch_set":5,"id":"1a4dcd0f_cca3c49d","line":6,"updated":"2015-08-03 23:25:35.000000000","message":"Is it possible to avoid using ID but use css class names as selector here? It\u0027s is hard to manage hard-coded IDs and make sure they are unique across the entire app.\n\nAlso please use hyphen-seperate-case when naming css IDs and class names.\n\nThanks.","commit_id":"6dc27817d0fe9da7b1ef287c1f4313b6397cdf6e"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"f8d073ac1df6d19603b38ede8fa4ccdd87a248d6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  angular"},{"line_number":4,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":5,"context_line":"    .controller(\u0027ImageFormCtrl\u0027, [\u0027$scope\u0027, function ($scope) {"},{"line_number":6,"context_line":"      $scope.copyFrom \u003d $(\u0027#id_image_url\u0027).val();"},{"line_number":7,"context_line":"      $scope.diskFormat \u003d $(\u0027#id_disk_format\u0027).val();"},{"line_number":8,"context_line":"      $scope.selectImageFormat \u003d function (path) {"},{"line_number":9,"context_line":"        if (!path) { return; }"}],"source_content_type":"text/javascript","patch_set":5,"id":"1a4dcd0f_afe42a3b","line":6,"in_reply_to":"1a4dcd0f_cca3c49d","updated":"2015-08-04 00:00:49.000000000","message":"I didn\u0027t name anything. Just setting the initial values in the existing widget based on whats sent over from python. But I think I figured out how to get them by class as you suggest. I think that\u0027s cleaner too.","commit_id":"6dc27817d0fe9da7b1ef287c1f4313b6397cdf6e"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"04e06b98312537e8e93ae34f03a2a270ab73de1b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":"  angular"},{"line_number":4,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":5,"context_line":"    .controller(\u0027ImageFormCtrl\u0027, [\u0027$scope\u0027, \u0027$element\u0027, function ("},{"line_number":6,"context_line":"      $scope,"},{"line_number":7,"context_line":"      $element) {"},{"line_number":8,"context_line":"      $scope.copyFrom \u003d $element(\u0027.image_url\u0027).val();"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_f112d908","line":5,"updated":"2015-08-04 21:24:51.000000000","message":"sorry, wrong one. rebase on https://review.openstack.org/#/c/205104/","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"bfd6ae822b0acbbf60b70b898288d0f8fa214133","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":"  angular"},{"line_number":4,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":5,"context_line":"    .controller(\u0027ImageFormCtrl\u0027, [\u0027$scope\u0027, \u0027$element\u0027, function ("},{"line_number":6,"context_line":"      $scope,"},{"line_number":7,"context_line":"      $element) {"},{"line_number":8,"context_line":"      $scope.copyFrom \u003d $element(\u0027.image_url\u0027).val();"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_624599b1","line":5,"in_reply_to":"1a4dcd0f_f112d908","updated":"2015-08-04 22:27:56.000000000","message":"Ok. Is it likely to be merged soon? I\u0027m really trying to get this in soon because I\u0027ve had to rewrite a bunch of these patches due to lots of rebasing. If we rebase on 205104 and it takes a long time to merge, then I\u0027ll have to keep rebasing a lot.","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"}],"openstack_dashboard/static/app/tech-debt/image-form.controller.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"8b114bbffa599aa8004c81662cb2a4d13753a68d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"      var format \u003d path.substr(path.lastIndexOf(\".\") + 1)"},{"line_number":28,"context_line":"                       .toLowerCase().replace(/[^a-z0-9]+/gi, \"\");"},{"line_number":29,"context_line":"      /* eslint-disable angular/ng_angularelement */"},{"line_number":30,"context_line":"      if ($(\u0027#id_disk_format\u0027).find(\u0027[value\u003d\u0027 + format + \u0027]\u0027).length !\u003d\u003d 0) {"},{"line_number":31,"context_line":"      /* eslint-enable angular/ng_angularelement */"},{"line_number":32,"context_line":"        ctrl.diskFormat \u003d format;"},{"line_number":33,"context_line":"      } else {"}],"source_content_type":"text/javascript","patch_set":11,"id":"1a4dcd0f_40d3b004","line":30,"updated":"2015-08-05 02:35:57.000000000","message":"Sorry missed this line in previous review, It has some issues:\n\n- Requires full jQuery which seams could be avoid.\n- Using hard-coded ID and trying to find the element in whole DOM scope.\n- Logic relying on DOM structure.\n\nThe code here seams not robust enough.\n\nBTW, please be consistent with single quote in this file.","commit_id":"04ac0e6b26d5fbefb2df3331985c96882c01ee2a"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2fa2b6a4b50eb678a465eede04122d196c73bdf5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"      var format \u003d path.substr(path.lastIndexOf(\".\") + 1)"},{"line_number":28,"context_line":"                       .toLowerCase().replace(/[^a-z0-9]+/gi, \"\");"},{"line_number":29,"context_line":"      /* eslint-disable angular/ng_angularelement */"},{"line_number":30,"context_line":"      if ($(\u0027#id_disk_format\u0027).find(\u0027[value\u003d\u0027 + format + \u0027]\u0027).length !\u003d\u003d 0) {"},{"line_number":31,"context_line":"      /* eslint-enable angular/ng_angularelement */"},{"line_number":32,"context_line":"        ctrl.diskFormat \u003d format;"},{"line_number":33,"context_line":"      } else {"}],"source_content_type":"text/javascript","patch_set":11,"id":"1a4dcd0f_c0c82025","line":30,"in_reply_to":"1a4dcd0f_40d3b004","updated":"2015-08-05 02:42:56.000000000","message":"I didn\u0027t write it. only the two lines above. I don\u0027t believe too much code refactoring in a bug fix patch-set is appropriate.","commit_id":"04ac0e6b26d5fbefb2df3331985c96882c01ee2a"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"3bcedc900f4bc0ae7e102d5efca0f672ad0ec2ba","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  angular"},{"line_number":18,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":19,"context_line":"    .controller(\u0027ImageFormController\u0027, [\u0027$element\u0027, ImageFormController]);"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  function ImageFormController($element) {"},{"line_number":22,"context_line":"    var ctrl \u003d this;"}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_864df49b","line":19,"updated":"2015-08-06 15:40:51.000000000","message":"please, use explicit depency injection the same way you\u0027ve done with the heat service","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"2a30fc1c64f6c45f946f9f90c5e736c1bb780e9c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"  angular"},{"line_number":18,"context_line":"    .module(\u0027horizon.app.tech-debt\u0027)"},{"line_number":19,"context_line":"    .controller(\u0027ImageFormController\u0027, [\u0027$element\u0027, ImageFormController]);"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"  function ImageFormController($element) {"},{"line_number":22,"context_line":"    var ctrl \u003d this;"}],"source_content_type":"text/javascript","patch_set":13,"id":"1a4dcd0f_77adf099","line":19,"in_reply_to":"1a4dcd0f_864df49b","updated":"2015-08-06 19:54:09.000000000","message":"Done","commit_id":"ac26c7bcd6b36f2a5f7b09283e70966d0b09d972"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"04f5861f6a401770986aa72ce63685624e00ce93","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  function ImageFormController($element) {"},{"line_number":24,"context_line":"    var ctrl \u003d this;"},{"line_number":25,"context_line":"    ctrl.copyFrom \u003d $element(\u0027.image_url\u0027).val();"},{"line_number":26,"context_line":"    ctrl.diskFormat \u003d $element(\u0027.disk_format\u0027).val();"},{"line_number":27,"context_line":"    ctrl.selectImageFormat \u003d function (path) {"},{"line_number":28,"context_line":"      if (!path) { return; }"},{"line_number":29,"context_line":"      var format \u003d path.substr(path.lastIndexOf(\".\") + 1)"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_ba4f58bd","line":26,"updated":"2015-08-24 20:18:08.000000000","message":"I have no idea what this does, or where it is called.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"86dcdf92600ed4ccba9c7612043ac1aa5e4a91bb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  function ImageFormController($element) {"},{"line_number":24,"context_line":"    var ctrl \u003d this;"},{"line_number":25,"context_line":"    ctrl.copyFrom \u003d $element(\u0027.image_url\u0027).val();"},{"line_number":26,"context_line":"    ctrl.diskFormat \u003d $element(\u0027.disk_format\u0027).val();"},{"line_number":27,"context_line":"    ctrl.selectImageFormat \u003d function (path) {"},{"line_number":28,"context_line":"      if (!path) { return; }"},{"line_number":29,"context_line":"      var format \u003d path.substr(path.lastIndexOf(\".\") + 1)"}],"source_content_type":"text/javascript","patch_set":21,"id":"fa1b9901_eb70a0a6","line":26,"in_reply_to":"fa1b9901_ba4f58bd","updated":"2015-08-24 22:05:22.000000000","message":"When the form\u0027s initially loaded, the control is inited. It currently ignores image_url and disk_format defaults as provided by the server. This just puts the defaults back.","commit_id":"6d7decfc92059a1769805008d94e47ff7f39a770"}],"openstack_dashboard/static/openstack-service-api/heat.service.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"0e56d43fcb9ed048bec276dbb7279fc761b01b44","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      return apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":47,"context_line":"//        .error(function () {"},{"line_number":48,"context_line":"//          toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate template.\u0027));"},{"line_number":49,"context_line":"//      });"},{"line_number":50,"context_line":"    };"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  }"}],"source_content_type":"text/javascript","patch_set":5,"id":"1a4dcd0f_2cb588cc","line":49,"updated":"2015-08-03 23:25:35.000000000","message":"Why leave commented-out code here?","commit_id":"6dc27817d0fe9da7b1ef287c1f4313b6397cdf6e"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"f8d073ac1df6d19603b38ede8fa4ccdd87a248d6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      return apiService.get(\u0027/api/heat/validate/\u0027, config);"},{"line_number":47,"context_line":"//        .error(function () {"},{"line_number":48,"context_line":"//          toastService.add(\u0027error\u0027, gettext(\u0027Unable to validate template.\u0027));"},{"line_number":49,"context_line":"//      });"},{"line_number":50,"context_line":"    };"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  }"}],"source_content_type":"text/javascript","patch_set":5,"id":"1a4dcd0f_efc1d281","line":49,"in_reply_to":"1a4dcd0f_2cb588cc","updated":"2015-08-04 00:00:49.000000000","message":"Oh. simple oversight. Good catch. I\u0027ll remove it.","commit_id":"6dc27817d0fe9da7b1ef287c1f4313b6397cdf6e"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"2137acac1c174a434800d0f5fbdab9ac102a6ebe","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  \u0027use strict\u0027;"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_7afea339","line":20,"updated":"2015-08-04 20:27:50.000000000","message":"this module was renamed to horizon.app.core.openstack-service-api. please, refer to https://github.com/openstack/horizon/tree/master/openstack_dashboard/static/app/core/openstack-service-api\n\nyou\u0027ll probably need to move your service files accordingly.","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"bfd6ae822b0acbbf60b70b898288d0f8fa214133","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  \u0027use strict\u0027;"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.openstack-service-api\u0027)"},{"line_number":21,"context_line":"    .service(\u0027horizon.openstack-service-api.heat\u0027, HeatAPI);"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"  HeatAPI.$inject \u003d [\u0027horizon.framework.util.http.service\u0027,"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_e2120909","line":20,"in_reply_to":"1a4dcd0f_7afea339","updated":"2015-08-04 22:27:56.000000000","message":"Done","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"}],"openstack_dashboard/static/openstack-service-api/heat.service.spec.js":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"8ef8c283e93dd05659bbb13f05830b10c76dca77","unresolved":false,"context_lines":[{"line_number":36,"context_line":"      expect(service).toBeDefined();"},{"line_number":37,"context_line":"    });"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    var tests \u003d ["},{"line_number":40,"context_line":"    ];"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    // Iterate through the defined tests and apply as Jasmine specs."}],"source_content_type":"text/javascript","patch_set":6,"id":"1a4dcd0f_2a5fa873","line":39,"updated":"2015-08-04 00:58:15.000000000","message":"will this be filled out?","commit_id":"41b05f8e4517b3ed840dcba3561aeca4c874f2b1"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"63590a712d8c8107ca599e9ba414f9e1e5ab2e70","unresolved":false,"context_lines":[{"line_number":36,"context_line":"      expect(service).toBeDefined();"},{"line_number":37,"context_line":"    });"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    var tests \u003d ["},{"line_number":40,"context_line":"    ];"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    // Iterate through the defined tests and apply as Jasmine specs."}],"source_content_type":"text/javascript","patch_set":6,"id":"1a4dcd0f_948268ff","line":39,"in_reply_to":"1a4dcd0f_2a5fa873","updated":"2015-08-04 20:03:17.000000000","message":"I just took a stab at it based on all the other .service.js files. Should be in the next release.","commit_id":"41b05f8e4517b3ed840dcba3561aeca4c874f2b1"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"2137acac1c174a434800d0f5fbdab9ac102a6ebe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    beforeEach(module(\u0027horizon.openstack-service-api\u0027));"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    beforeEach(module(function($provide) {"},{"line_number":28,"context_line":"      window.apiTest.initServices($provide, apiService, toastService);"},{"line_number":29,"context_line":"    }));"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    beforeEach(inject([\u0027horizon.openstack-service-api.heat\u0027, function(heatAPI) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_7a7303e8","line":28,"updated":"2015-08-04 20:27:50.000000000","message":"eslint will probably raise an error for using window. please, use $windowProvider instead","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"},{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"bfd6ae822b0acbbf60b70b898288d0f8fa214133","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    beforeEach(module(\u0027horizon.openstack-service-api\u0027));"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    beforeEach(module(function($provide) {"},{"line_number":28,"context_line":"      window.apiTest.initServices($provide, apiService, toastService);"},{"line_number":29,"context_line":"    }));"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    beforeEach(inject([\u0027horizon.openstack-service-api.heat\u0027, function(heatAPI) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"1a4dcd0f_22931151","line":28,"in_reply_to":"1a4dcd0f_7a7303e8","updated":"2015-08-04 22:27:56.000000000","message":"Not sure how to do this. Just s/window/$windowProvider/? I just copied it verbatim from glance.service.spec.js. Is there an example somewhere?","commit_id":"a05358df435a2d94efa8a79113172bd653bf6f1b"}]}
