)]}'
{"horizon/static/horizon/js/angular/services/hz.api.glance.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"cc6a15f67d92a9e4beb325a43f1883e006e6b4b6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"  // API module will have access to the Glance APIs."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  angular.module(\u0027hz.api\u0027)"},{"line_number":95,"context_line":"    .service(\u0027glanceAPI\u0027, [\u0027$http\u0027, GlanceAPI]);"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":14,"id":"da86d52c_2bb50a31","line":95,"updated":"2015-02-03 07:00:34.000000000","message":"Once Richard updates his API service wrapper to allow parameters to be passed through on the GET call, then update this to inject the api service rather than the direct $http.  Also, update the functions to call that and provide a default error message as well.","commit_id":"3e5ed8ff3bd0112d5033a35ad30131b9753a3f10"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"c5b010c40ee9c3371059fd165a4d636db00ec1cb","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  // API module will have access to the Glance APIs."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  angular.module(\u0027hz.api\u0027)"},{"line_number":104,"context_line":"    .service(\u0027glanceAPI\u0027, [\u0027apiService\u0027, GlanceAPI]);"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":21,"id":"da86d52c_cc4de49b","line":104,"updated":"2015-02-05 20:30:16.000000000","message":"I\u0027d like you to consider using .factory() pattern for this glanceAPI service provider. The reason for this is, the provider should always return a singleton, which may have or not have internal states, factory pattern is just for this.\n\nI know angular\u0027s terminology is confusing. factory pattern in angular is really return a singleton, while service pattern returns a new instance each time we inject it.\n\nJust in case for a reference on factory pattern and service pattern for angular provider: https://docs.angularjs.org/guide/providers","commit_id":"63571e3650c22000819569128bb0e69bcfcc6b0e"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"b29de557e631f4460b8cf6ae49dbfcc32489e715","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  // API module will have access to the Glance APIs."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  angular.module(\u0027hz.api\u0027)"},{"line_number":104,"context_line":"    .service(\u0027glanceAPI\u0027, [\u0027apiService\u0027, GlanceAPI]);"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":21,"id":"da86d52c_f83d588f","line":104,"in_reply_to":"da86d52c_33e71814","updated":"2015-02-17 22:44:57.000000000","message":"per our discussion in IRC that all services are singletons and we couldn\u0027t find a reason to switch, I\u0027ve put it back to the service pattern.","commit_id":"63571e3650c22000819569128bb0e69bcfcc6b0e"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"9c5b16ac87dd9232b4c7ebd6a1fb3891336f6b46","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  // API module will have access to the Glance APIs."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  angular.module(\u0027hz.api\u0027)"},{"line_number":104,"context_line":"    .service(\u0027glanceAPI\u0027, [\u0027apiService\u0027, GlanceAPI]);"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":21,"id":"da86d52c_13da1de9","line":104,"in_reply_to":"da86d52c_cc4de49b","updated":"2015-02-17 17:49:49.000000000","message":"Done","commit_id":"63571e3650c22000819569128bb0e69bcfcc6b0e"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"29e6867add404b85ade5058e988d69371107e68c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"  // API module will have access to the Glance APIs."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  angular.module(\u0027hz.api\u0027)"},{"line_number":104,"context_line":"    .service(\u0027glanceAPI\u0027, [\u0027apiService\u0027, GlanceAPI]);"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":21,"id":"da86d52c_33e71814","line":104,"in_reply_to":"da86d52c_cc4de49b","updated":"2015-02-17 21:12:02.000000000","message":"This statement about singletons is not correct according to the Angular documentation (in the page sqchen links to): \"Note: All services in Angular are singletons. That means that the injector uses each recipe at most once to create the object. The injector then caches the reference for all future needs.\"\n\nSo the use of service() vs factory() ends up being a style decision, and I much prefer the style used above with .service().","commit_id":"63571e3650c22000819569128bb0e69bcfcc6b0e"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"2adf587e5033348050aeb48b5ffc89a62b15de83","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":47,"context_line":"      return apiService.get(\u0027/api/glance/images/\u0027, config)"},{"line_number":48,"context_line":"        .error(function () {"},{"line_number":49,"context_line":"        horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve images.\u0027));"},{"line_number":50,"context_line":"      });"},{"line_number":51,"context_line":"    };"},{"line_number":52,"context_line":""}],"source_content_type":"text/javascript","patch_set":22,"id":"da86d52c_4903cf0f","line":49,"updated":"2015-02-11 20:06:14.000000000","message":"indent horizon.alert(...)","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5b74d1c76f8be4fb5239b08c4b133bf3170f136d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":47,"context_line":"      return apiService.get(\u0027/api/glance/images/\u0027, config)"},{"line_number":48,"context_line":"        .error(function () {"},{"line_number":49,"context_line":"        horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve images.\u0027));"},{"line_number":50,"context_line":"      });"},{"line_number":51,"context_line":"    };"},{"line_number":52,"context_line":""}],"source_content_type":"text/javascript","patch_set":22,"id":"da86d52c_5f098193","line":49,"in_reply_to":"da86d52c_4903cf0f","updated":"2015-02-13 01:15:09.000000000","message":"Done","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"2adf587e5033348050aeb48b5ffc89a62b15de83","unresolved":false,"context_lines":[{"line_number":78,"context_line":"     */"},{"line_number":79,"context_line":"    this.getMetadefsNamespaces \u003d function(params) {"},{"line_number":80,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":81,"context_line":"      return $http.get(\u0027/api/glance/namespaces/\u0027, config)"},{"line_number":82,"context_line":"        .error(function () {"},{"line_number":83,"context_line":"        horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve namespaces.\u0027));"},{"line_number":84,"context_line":"      });"}],"source_content_type":"text/javascript","patch_set":22,"id":"da86d52c_ec84910c","line":81,"updated":"2015-02-11 20:06:14.000000000","message":"use apiService?","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5b74d1c76f8be4fb5239b08c4b133bf3170f136d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"     */"},{"line_number":79,"context_line":"    this.getMetadefsNamespaces \u003d function(params) {"},{"line_number":80,"context_line":"      var config \u003d (params) ? { \u0027params\u0027 : params} : {};"},{"line_number":81,"context_line":"      return $http.get(\u0027/api/glance/namespaces/\u0027, config)"},{"line_number":82,"context_line":"        .error(function () {"},{"line_number":83,"context_line":"        horizon.alert(\u0027error\u0027, gettext(\u0027Unable to retrieve namespaces.\u0027));"},{"line_number":84,"context_line":"      });"}],"source_content_type":"text/javascript","patch_set":22,"id":"da86d52c_3f068d86","line":81,"in_reply_to":"da86d52c_ec84910c","updated":"2015-02-13 01:15:09.000000000","message":"Done","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"384c99598d056bec9195ad381e32488286560bf6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    // Images"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    /**"},{"line_number":30,"context_line":"     * @nane hz.api.glanceAPI.getImages"},{"line_number":31,"context_line":"     * @description"},{"line_number":32,"context_line":"     * Get a list of images."},{"line_number":33,"context_line":"     *"}],"source_content_type":"text/javascript","patch_set":24,"id":"da86d52c_4dd8f252","line":30,"updated":"2015-02-13 05:29:22.000000000","message":"should be name.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"384c99598d056bec9195ad381e32488286560bf6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    // Metadata Definitions - Namespaces"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    /**"},{"line_number":74,"context_line":"     * @nane hz.api.glanceAPI.getNamespaces"},{"line_number":75,"context_line":"     * @description"},{"line_number":76,"context_line":"     * Get a list of metadata definition namespaces."},{"line_number":77,"context_line":"     *"}],"source_content_type":"text/javascript","patch_set":24,"id":"da86d52c_2dd57e1b","line":74,"updated":"2015-02-13 05:29:22.000000000","message":"should be name.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"384c99598d056bec9195ad381e32488286560bf6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    };"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"     /**"},{"line_number":124,"context_line":"     * @nane hz.api.glanceAPI.getImages"},{"line_number":125,"context_line":"     * @description"},{"line_number":126,"context_line":"     * Get a specific namespace."},{"line_number":127,"context_line":"     *"}],"source_content_type":"text/javascript","patch_set":24,"id":"da86d52c_cde30203","line":124,"updated":"2015-02-13 05:29:22.000000000","message":"should be name.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"1be05daa924a3d4ce968ede3c645fcd74e6724a8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"limitations under the License."},{"line_number":15,"context_line":"*/"},{"line_number":16,"context_line":"/*global angular*/"},{"line_number":17,"context_line":"(function () {"},{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":""}],"source_content_type":"text/javascript","patch_set":31,"id":"da86d52c_003e01b8","line":16,"updated":"2015-02-18 22:27:52.000000000","message":"/*global angular*/ -- no longer needed","commit_id":"28e2d03c94a18fc9ade419f7701d61bcdbe50d52"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"91895bbd48e8f55fdb92e0f885ba8c6c1769fc43","unresolved":false,"context_lines":[{"line_number":13,"context_line":"See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"limitations under the License."},{"line_number":15,"context_line":"*/"},{"line_number":16,"context_line":"/*global angular*/"},{"line_number":17,"context_line":"(function () {"},{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":""}],"source_content_type":"text/javascript","patch_set":31,"id":"da86d52c_fbc60048","line":16,"in_reply_to":"da86d52c_003e01b8","updated":"2015-02-18 22:36:18.000000000","message":"Done","commit_id":"28e2d03c94a18fc9ade419f7701d61bcdbe50d52"}],"openstack_dashboard/api/glance.py":[{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"b4e95188dd31481c912a47ff04f51698281947a8","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return json.dumps(result, indent\u003dindent)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def to_dict(self):"},{"line_number":172,"context_line":"        return self.__dict__[\u0027_apiresource\u0027]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class Namespace(BaseGlanceMetadefAPIResourceWrapper):"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_0dd43ae7","line":172,"updated":"2015-02-13 05:34:28.000000000","message":"Why is this not just self._apiresource? I can\u0027t see any magic that would prevent that working.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"285e4aff9c183c9cfa0b6e7f0fde14b46cfd82c0","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return json.dumps(result, indent\u003dindent)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def to_dict(self):"},{"line_number":172,"context_line":"        return self.__dict__[\u0027_apiresource\u0027]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class Namespace(BaseGlanceMetadefAPIResourceWrapper):"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_c392f39d","line":172,"in_reply_to":"da86d52c_0dd43ae7","updated":"2015-02-13 07:29:09.000000000","message":"Not sure. Thanks for the catch.  Done!","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                result[attr] \u003d getattr(self, attr)"},{"line_number":169,"context_line":"        return json.dumps(result, indent\u003dindent)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def to_dict(self):"},{"line_number":172,"context_line":"        return self._apiresource"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_fd994f7a","line":171,"updated":"2015-02-13 10:38:53.000000000","message":"this is not really converting the content to dict, perhaps as_dict to match the signature above?","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                result[attr] \u003d getattr(self, attr)"},{"line_number":169,"context_line":"        return json.dumps(result, indent\u003dindent)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def to_dict(self):"},{"line_number":172,"context_line":"        return self._apiresource"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_599a586f","line":171,"in_reply_to":"da86d52c_fd994f7a","updated":"2015-02-14 00:31:13.000000000","message":"Will keep this name to match glance client image objects.\n\nThey have a to_dict but namespaces don\u0027t. So, keeping the same name.  I will look at entering a bug on glance client to get the same function on namespaces, but it would be a long shot to get that in, reviewed, released, updated in global requirements, etc, etc, in Glance client before end of k-3. Was just in their meeting this week and already high priority items are getting locked down.  This would not be a high priority for them.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"}],"openstack_dashboard/api/rest/__init__.py":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"2adf587e5033348050aeb48b5ffc89a62b15de83","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# import REST API modules here"},{"line_number":25,"context_line":"import keystone     #flake8: noqa"},{"line_number":26,"context_line":"import glance       #flake8: noqa"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_ccad0d86","line":26,"updated":"2015-02-11 20:06:14.000000000","message":"nit: alphabetical","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5b74d1c76f8be4fb5239b08c4b133bf3170f136d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# import REST API modules here"},{"line_number":25,"context_line":"import keystone     #flake8: noqa"},{"line_number":26,"context_line":"import glance       #flake8: noqa"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_9f36994f","line":26,"in_reply_to":"da86d52c_ccad0d86","updated":"2015-02-13 01:15:09.000000000","message":"Done","commit_id":"f576e4a59d86b1d3d565ef4bc3d4d29c9a9ad434"}],"openstack_dashboard/api/rest/glance.py":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"384c99598d056bec9195ad381e32488286560bf6","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        filters, kwargs \u003d _parse_filters_kwargs("},{"line_number":72,"context_line":"            request, [\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        images \u003d api.glance.image_list_detailed(request,"},{"line_number":75,"context_line":"                                                filters\u003dfilters,"},{"line_number":76,"context_line":"                                                **kwargs)[0]"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_adcfae7d","line":73,"updated":"2015-02-13 05:29:22.000000000","message":"make set as per Richard\u0027s comments in the neutron patch.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"285e4aff9c183c9cfa0b6e7f0fde14b46cfd82c0","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        filters, kwargs \u003d _parse_filters_kwargs("},{"line_number":72,"context_line":"            request, [\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        images \u003d api.glance.image_list_detailed(request,"},{"line_number":75,"context_line":"                                                filters\u003dfilters,"},{"line_number":76,"context_line":"                                                **kwargs)[0]"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_c3911353","line":73,"in_reply_to":"da86d52c_adcfae7d","updated":"2015-02-13 07:29:09.000000000","message":"Done. Also made a class variable since it doesn\u0027t change from invocation to invocation.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","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":25,"id":"da86d52c_122ff2a8","line":22,"updated":"2015-02-13 10:38:53.000000000","message":"extra space not needed","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","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":25,"id":"da86d52c_053cefbe","line":22,"in_reply_to":"da86d52c_122ff2a8","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from openstack_dashboard.api.rest import urls"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _parse_filters_kwargs(request, keywords):"},{"line_number":27,"context_line":"    filters \u003d {}"},{"line_number":28,"context_line":"    kwargs \u003d {}"},{"line_number":29,"context_line":"    for param in request.GET:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_dd5f2b0e","line":26,"updated":"2015-02-13 10:38:53.000000000","message":"I understand the method, a little comment would be useful here though.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from openstack_dashboard.api.rest import urls"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _parse_filters_kwargs(request, keywords):"},{"line_number":27,"context_line":"    filters \u003d {}"},{"line_number":28,"context_line":"    kwargs \u003d {}"},{"line_number":29,"context_line":"    for param in request.GET:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_4546e750","line":26,"in_reply_to":"da86d52c_dd5f2b0e","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"e18e7fa465e9d1a7e4304ce0c46f6988aa071213","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"API for Glance images."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    url_regex \u003d r\u0027glance/images/$\u0027"},{"line_number":42,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @rest_utils.ajax()"},{"line_number":45,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_29664d2a","line":42,"updated":"2015-02-13 08:47:05.000000000","message":"I\u0027m a bit struggling with the name \u0027keywords\u0027 here. Is there a reason to make this private, and url_regex public?\n\nWhat about filter_args instead of keywords?","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"API for Glance images."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    url_regex \u003d r\u0027glance/images/$\u0027"},{"line_number":42,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @rest_utils.ajax()"},{"line_number":45,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_fd8a2f63","line":42,"in_reply_to":"da86d52c_29664d2a","updated":"2015-02-13 10:38:53.000000000","message":"I think url_regex should have been a parameter of the register decorator. Something to consider later.\n\nAgree about the __keywords.  Should this just move to static constant since this metadef is also using the sorting/pagination mechanism?","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"API for Glance images."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    url_regex \u003d r\u0027glance/images/$\u0027"},{"line_number":42,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @rest_utils.ajax()"},{"line_number":45,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_a56c03d2","line":42,"in_reply_to":"da86d52c_3d5d9916","updated":"2015-02-14 00:31:13.000000000","message":"Changed to static constant.  They are the same keywords right now, so no need to define individually.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"8c864e98353bd2555bcd86372c451e8204dd1ed5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"API for Glance images."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    url_regex \u003d r\u0027glance/images/$\u0027"},{"line_number":42,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @rest_utils.ajax()"},{"line_number":45,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_3d5d9916","line":42,"in_reply_to":"da86d52c_fd8a2f63","updated":"2015-02-13 15:57:40.000000000","message":"I made private because these are the exact keywords that the glance API expects as keywords and not filters.\n\nA little explanation.  The glance python client differentiates between the notion of keywords and filters, particularly with v1.  I\u0027m working a separate patch effort with Julie on refactoring the glance client to normalize between v1 and v2, but I don\u0027t want that whole refactor to be part of this patch.\n\nhttps://review.openstack.org/#/c/150084/","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        images \u003d api.glance.image_list_detailed(request,"},{"line_number":76,"context_line":"                                                filters\u003dfilters,"},{"line_number":77,"context_line":"                                                **kwargs)[0]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return {\u0027items\u0027: [i.to_dict() for i in images]}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_9d485330","line":77,"updated":"2015-02-13 10:38:53.000000000","message":"Might be useful to pass along the other data in the tuple, in case there is a client that needs to fetch all data.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"8c864e98353bd2555bcd86372c451e8204dd1ed5","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        images \u003d api.glance.image_list_detailed(request,"},{"line_number":76,"context_line":"                                                filters\u003dfilters,"},{"line_number":77,"context_line":"                                                **kwargs)[0]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return {\u0027items\u0027: [i.to_dict() for i in images]}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_9d7a0576","line":77,"in_reply_to":"da86d52c_9d485330","updated":"2015-02-13 15:57:40.000000000","message":"Can we just match the pattern needed for the initial work?","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        images \u003d api.glance.image_list_detailed(request,"},{"line_number":76,"context_line":"                                                filters\u003dfilters,"},{"line_number":77,"context_line":"                                                **kwargs)[0]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return {\u0027items\u0027: [i.to_dict() for i in images]}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_c5f657f9","line":77,"in_reply_to":"da86d52c_9d7a0576","updated":"2015-02-14 00:31:13.000000000","message":"Okay, thought about it more and added to output. I think we might end up wanting to change the interaction to let client control page size rather than paginate, but I don\u0027t think we should change that behavior now.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":107,"context_line":"       http://docs.openstack.org/developer/glance/metadefs-concepts.html"},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    url_regex \u003d r\u0027glance/metadefs/namespaces/$\u0027"},{"line_number":110,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @rest_utils.ajax()"},{"line_number":113,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_1d0383bf","line":110,"updated":"2015-02-13 10:38:53.000000000","message":"same comment as above","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"       http://docs.openstack.org/developer/glance/metadefs-concepts.html"},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    url_regex \u003d r\u0027glance/metadefs/namespaces/$\u0027"},{"line_number":110,"context_line":"    __keywords \u003d set([\u0027marker\u0027, \u0027sort_dir\u0027, \u0027sort_key\u0027, \u0027paginate\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @rest_utils.ajax()"},{"line_number":113,"context_line":"    def get(self, request):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_e5da7b78","line":110,"in_reply_to":"da86d52c_1d0383bf","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        filters, kwargs \u003d _parse_filters_kwargs(request, self.__keywords)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        namespaces \u003d api.glance.metadefs_namespace_list("},{"line_number":146,"context_line":"            request, filters\u003dfilters, **kwargs)[0]"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        return {\u0027items\u0027: [n.to_dict() for n in namespaces]}"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_bdf357e6","line":146,"updated":"2015-02-13 10:38:53.000000000","message":"same comment here about returning if the additional data in the tuple","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        filters, kwargs \u003d _parse_filters_kwargs(request, self.__keywords)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        namespaces \u003d api.glance.metadefs_namespace_list("},{"line_number":146,"context_line":"            request, filters\u003dfilters, **kwargs)[0]"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        return {\u0027items\u0027: [n.to_dict() for n in namespaces]}"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_05d86f7e","line":146,"in_reply_to":"da86d52c_bdf357e6","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"1c889bf9b63c561c3e93cabff17a513c0b551aed","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        Returns the namespace. GET params are passed through."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        Example GET:"},{"line_number":123,"context_line":"        http://localhost/api/glance/metadefs/namespaces/OS::Compute::Watchdog?resource_type\u003dOS::Nova::Flavor  #flake8: noqa"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        return api.glance.metadefs_namespace_get("},{"line_number":126,"context_line":"            request, namespace, **request.GET)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_85d5a344","line":123,"updated":"2015-02-18 21:42:52.000000000","message":"Doesn\u0027t seem like we\u0027re using the params at all since JS side isnt passing anything. Consequently, we may not need **request.GET either.","commit_id":"39014c025505ca949241c9b417a67b5f42f85751"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"cbccf5effcdc7a791332a54d7281b992c53d88a2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        Returns the namespace. GET params are passed through."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        Example GET:"},{"line_number":123,"context_line":"        http://localhost/api/glance/metadefs/namespaces/OS::Compute::Watchdog?resource_type\u003dOS::Nova::Flavor  #flake8: noqa"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        return api.glance.metadefs_namespace_get("},{"line_number":126,"context_line":"            request, namespace, **request.GET)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_25c0772a","line":123,"in_reply_to":"da86d52c_85d5a344","updated":"2015-02-18 21:49:20.000000000","message":"Done","commit_id":"39014c025505ca949241c9b417a67b5f42f85751"}],"openstack_dashboard/test/api_tests/glance_rest_tests.py":[{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"b4e95188dd31481c912a47ff04f51698281947a8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"},{"line_number":24,"context_line":"    def assertStatusCode(self, response, expected_code):"},{"line_number":25,"context_line":"        if response.status_code \u003d\u003d expected_code:"},{"line_number":26,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_0d98ba73","line":23,"updated":"2015-02-13 05:34:28.000000000","message":"Need to have a test specifically for the _parse_filters_keywords function ie. not testing it built into/side-effect of other tests.","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"285e4aff9c183c9cfa0b6e7f0fde14b46cfd82c0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"},{"line_number":24,"context_line":"    def assertStatusCode(self, response, expected_code):"},{"line_number":25,"context_line":"        if response.status_code \u003d\u003d expected_code:"},{"line_number":26,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_3ed84652","line":23,"in_reply_to":"da86d52c_0d98ba73","updated":"2015-02-13 07:29:09.000000000","message":"Done","commit_id":"c0346e8d48d5c1601efa1b147b9505b45e7eebde"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import unittest2"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from openstack_dashboard.api.rest import glance"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_7deabfad","line":19,"updated":"2015-02-13 10:38:53.000000000","message":"extra space not needed","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import unittest2"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from openstack_dashboard.api.rest import glance"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_c55bb7f4","line":19,"in_reply_to":"da86d52c_7deabfad","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from openstack_dashboard.api.rest import glance"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_fdd5cfe5","line":20,"updated":"2015-02-13 10:38:53.000000000","message":"don\u0027t use relative import","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from openstack_dashboard.api.rest import glance"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_e5927b57","line":20,"in_reply_to":"da86d52c_fdd5cfe5","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"},{"line_number":24,"context_line":"    def assertStatusCode(self, response, expected_code):"},{"line_number":25,"context_line":"        if response.status_code \u003d\u003d expected_code:"},{"line_number":26,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_fd1a2fc5","line":23,"updated":"2015-02-13 10:38:53.000000000","message":"maybe consider re-using the glance test data in this test","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from rest_test_utils import construct_request   # noqa"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ImagesRestTestCase(unittest2.TestCase):"},{"line_number":24,"context_line":"    def assertStatusCode(self, response, expected_code):"},{"line_number":25,"context_line":"        if response.status_code \u003d\u003d expected_code:"},{"line_number":26,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_f9e5c3dc","line":23,"in_reply_to":"da86d52c_fd1a2fc5","updated":"2015-02-14 00:31:13.000000000","message":"I tried out using the client data as well as leveraging the pattern in other glance tests (e.g. extend from same test as glance_tests.py). After converting one test, I actually found the code a little more obtuse with less ability to just look directly at the code and compare expected with actual results. Would prefer to just test this way.","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"943b30dd76d1e1fc2f1dacf877c35bd2fe808b76","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @mock.patch.object(glance.api, \u0027glance\u0027)"},{"line_number":32,"context_line":"    def test_image_get_list_detailed(self, gc):"},{"line_number":33,"context_line":"        kwargs \u003d {\u0027sort_dir\u0027: \u0027desc\u0027,"},{"line_number":34,"context_line":"                  \u0027sort_key\u0027: \u0027namespace\u0027,"},{"line_number":35,"context_line":"                  \u0027marker\u0027: 1,"},{"line_number":36,"context_line":"                  \u0027paginate\u0027: False,"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_bd4ef7c0","line":33,"updated":"2015-02-13 10:38:53.000000000","message":"This would be more readable using the format:\n\nkwargs \u003d {\n    \u0027sort_dir\u0027: \u0027desc\u0027,\n    \u0027sort_key\u0027: \u0027namespace\u0027,\n}","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"35426fdce7a133798060cac03d128b764e2d5aeb","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @mock.patch.object(glance.api, \u0027glance\u0027)"},{"line_number":32,"context_line":"    def test_image_get_list_detailed(self, gc):"},{"line_number":33,"context_line":"        kwargs \u003d {\u0027sort_dir\u0027: \u0027desc\u0027,"},{"line_number":34,"context_line":"                  \u0027sort_key\u0027: \u0027namespace\u0027,"},{"line_number":35,"context_line":"                  \u0027marker\u0027: 1,"},{"line_number":36,"context_line":"                  \u0027paginate\u0027: False,"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_19eb77b1","line":33,"in_reply_to":"da86d52c_bd4ef7c0","updated":"2015-02-14 00:31:13.000000000","message":"Done","commit_id":"1ddaae7dc716f867d1b93a33e04d2720557630a3"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"34c2c1cd9fb257336d7f15955ea94c284f0cadcd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        request_params.update(filters)"},{"line_number":130,"context_line":"        request \u003d rest_test_utils.construct_request("},{"line_number":131,"context_line":"            **{\u0027GET\u0027: dict(request_params)})"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        output_filters, output_kwargs \u003d glance._parse_filters_kwargs(request)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        self.assertDictEqual(kwargs, output_kwargs)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_404e3939","line":132,"updated":"2015-02-18 22:06:27.000000000","message":"it is possible to combine these tests? the only difference between them are the kwargs and filters.","commit_id":"39014c025505ca949241c9b417a67b5f42f85751"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"e5518a693f21f143d20e96c08cc27a2270dc205b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        request_params.update(filters)"},{"line_number":130,"context_line":"        request \u003d rest_test_utils.construct_request("},{"line_number":131,"context_line":"            **{\u0027GET\u0027: dict(request_params)})"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        output_filters, output_kwargs \u003d glance._parse_filters_kwargs(request)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        self.assertDictEqual(kwargs, output_kwargs)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_fbcd205e","line":132,"in_reply_to":"da86d52c_404e3939","updated":"2015-02-18 22:36:03.000000000","message":"Done","commit_id":"39014c025505ca949241c9b417a67b5f42f85751"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"08a89c1d877132a1e2263a29838e0258be5f9d3d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        gc.metadefs_namespace_get.assert_called_once_with(request,"},{"line_number":116,"context_line":"                                                          \"1\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_parse_filters_keywords(self):"},{"line_number":119,"context_line":"        kwargs \u003d {"},{"line_number":120,"context_line":"            \u0027sort_dir\u0027: \u00271\u0027,"},{"line_number":121,"context_line":"            \u0027sort_key\u0027: \u00272\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"da86d52c_9b40a460","line":118,"updated":"2015-02-18 22:42:50.000000000","message":"not exactly what i had in mind, but it will work.","commit_id":"1126054cf332ef9445f2759d25cc615064a1a669"}]}
