)]}'
{"openstack_dashboard/api/glance.py":[{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"19b12d9bcb8f62617980c2be7701fafb10bfb90c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if not filters:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    if VERSIONS.active \u003e\u003d 2:"},{"line_number":154,"context_line":"        if \u0027is_public\u0027 in filters:"},{"line_number":155,"context_line":"            visibility \u003d PUBLIC_TO_VISIBILITY_MAP[filters[\u0027is_public\u0027]]"},{"line_number":156,"context_line":"            del filters[\u0027is_public\u0027]"},{"line_number":157,"context_line":"            if visibility is not None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_b6a3ba4e","line":154,"range":{"start_line":153,"start_character":4,"end_line":154,"end_character":34},"updated":"2016-07-19 15:33:40.000000000","message":"Why not have the condition like this?:\n`if VERSIONS.active \u003e\u003d 2 and \u0027is_public in filters:\u0027`","commit_id":"67d3e70e994e76431ef48ac7dcdf305999ab7904"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"41ad32453158492aa3280766747256af22166fb8","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if not filters:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    if VERSIONS.active \u003e\u003d 2:"},{"line_number":154,"context_line":"        if \u0027is_public\u0027 in filters:"},{"line_number":155,"context_line":"            visibility \u003d PUBLIC_TO_VISIBILITY_MAP[filters[\u0027is_public\u0027]]"},{"line_number":156,"context_line":"            del filters[\u0027is_public\u0027]"},{"line_number":157,"context_line":"            if visibility is not None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_d9081a30","line":154,"range":{"start_line":153,"start_character":4,"end_line":154,"end_character":34},"in_reply_to":"dada55a8_b6a3ba4e","updated":"2016-07-19 17:07:58.000000000","message":"This would actually change the behavior of the code. Consider the case where VERSIONS.active \u003d\u003d 2 and \u0027visibility\u0027 is in the filters. As the code is now, we wouldn\u0027t drop into the else. But with the proposed change, we would drop into the else, and I don\u0027t want that to happen.","commit_id":"67d3e70e994e76431ef48ac7dcdf305999ab7904"},{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"19b12d9bcb8f62617980c2be7701fafb10bfb90c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            del filters[\u0027is_public\u0027]"},{"line_number":157,"context_line":"            if visibility is not None:"},{"line_number":158,"context_line":"                filters[\u0027visibility\u0027] \u003d visibility"},{"line_number":159,"context_line":"    else:"},{"line_number":160,"context_line":"        if \u0027visibility\u0027 in filters:"},{"line_number":161,"context_line":"            filters[\u0027is_public\u0027] \u003d ("},{"line_number":162,"context_line":"                getattr(filters, \u0027visibility\u0027, None) \u003d\u003d \"public\")"},{"line_number":163,"context_line":"            del filter[\u0027visibility\u0027]"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_76678225","line":160,"range":{"start_line":159,"start_character":4,"end_line":160,"end_character":35},"updated":"2016-07-19 15:33:40.000000000","message":"and maybe change this to an elif?:\nelif \u0027visibility\u0027 in filters:","commit_id":"67d3e70e994e76431ef48ac7dcdf305999ab7904"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"41ad32453158492aa3280766747256af22166fb8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            del filters[\u0027is_public\u0027]"},{"line_number":157,"context_line":"            if visibility is not None:"},{"line_number":158,"context_line":"                filters[\u0027visibility\u0027] \u003d visibility"},{"line_number":159,"context_line":"    else:"},{"line_number":160,"context_line":"        if \u0027visibility\u0027 in filters:"},{"line_number":161,"context_line":"            filters[\u0027is_public\u0027] \u003d ("},{"line_number":162,"context_line":"                getattr(filters, \u0027visibility\u0027, None) \u003d\u003d \"public\")"},{"line_number":163,"context_line":"            del filter[\u0027visibility\u0027]"}],"source_content_type":"text/x-python","patch_set":20,"id":"dada55a8_ec69dabf","line":160,"range":{"start_line":159,"start_character":4,"end_line":160,"end_character":35},"in_reply_to":"dada55a8_76678225","updated":"2016-07-19 17:07:58.000000000","message":"This makes sense and simplifies the code. Will do in the next PS!","commit_id":"67d3e70e994e76431ef48ac7dcdf305999ab7904"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"dd361e8450bbf53c13a0344f8808d94fb3100647","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    image \u003d glanceclient(request).images.create(**kwargs)"},{"line_number":396,"context_line":"    if location is not None:"},{"line_number":397,"context_line":"        # TODO(tsufiev): to make this work, set /etc/glance/glance-api.conf"},{"line_number":398,"context_line":"        # parameter \u0027show_multiple_locations\u0027 to `true`"},{"line_number":399,"context_line":"        glanceclient(request).images.add_location(image.id, location, {})"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    if data:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9ad45d7e_69f017ff","line":398,"range":{"start_line":398,"start_character":10,"end_line":398,"end_character":55},"updated":"2016-08-10 14:17:44.000000000","message":"We will be deprecating this config in Newton https://review.openstack.org/#/c/313936/ as it poses more issues with deployments.","commit_id":"a917b8e29e8811e2bc6eeb9ec4f947e4ff0b9271"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"d2d3018bc2c5c5e5514c5cd6485d10b342fedbbe","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    image \u003d glanceclient(request).images.create(**kwargs)"},{"line_number":396,"context_line":"    if location is not None:"},{"line_number":397,"context_line":"        # TODO(tsufiev): to make this work, set /etc/glance/glance-api.conf"},{"line_number":398,"context_line":"        # parameter \u0027show_multiple_locations\u0027 to `true`"},{"line_number":399,"context_line":"        glanceclient(request).images.add_location(image.id, location, {})"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    if data:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7ac969e8_e98131fd","line":398,"range":{"start_line":398,"start_character":10,"end_line":398,"end_character":55},"in_reply_to":"9ad45d7e_69f017ff","updated":"2016-08-12 21:29:00.000000000","message":"Thanks for the update, Nikhil. We\u0027ll have to change the text of these comments.","commit_id":"a917b8e29e8811e2bc6eeb9ec4f947e4ff0b9271"}],"openstack_dashboard/dashboards/project/images/images/forms.py":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d33634c22e05738a69c573f78cedbcf5006181a1","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        if ((api.glance.VERSIONS.active \u003e\u003d 2 and not"},{"line_number":198,"context_line":"                getattr(settings, \u0027IMAGES_ALLOW_LOCATION\u0027, False)) or"},{"line_number":199,"context_line":"                not policy.check(((\"image\", \"set_image_location\"),), request)):"},{"line_number":200,"context_line":"            self._hide_url_source_type()"},{"line_number":201,"context_line":"        if not policy.check(((\"image\", \"publicize_image\"),), request):"},{"line_number":202,"context_line":"            self._hide_is_public()"},{"line_number":203,"context_line":"        # NOTE: GlanceV2 doesn\u0027t support copy-from feature, sorry!"}],"source_content_type":"text/x-python","patch_set":23,"id":"bacf61ea_2d167255","line":200,"updated":"2016-07-28 17:13:11.000000000","message":"The description shown in the Create Image form (https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/images/templates/images/images/_create.html#L12) should also be updated based on whether using a URL is an option.  Currently, the description assumes that URL is always an option, but with default configuration URL isn\u0027t an option in v2, and the description can be confusing if only a file upload is available.","commit_id":"992df7fcfc463b1f5000d6f3d44ebdf8ee27cfb2"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"0042a0d116b5165131d562a7552387d89af05b52","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        if ((api.glance.VERSIONS.active \u003e\u003d 2 and not"},{"line_number":198,"context_line":"                getattr(settings, \u0027IMAGES_ALLOW_LOCATION\u0027, False)) or"},{"line_number":199,"context_line":"                not policy.check(((\"image\", \"set_image_location\"),), request)):"},{"line_number":200,"context_line":"            self._hide_url_source_type()"},{"line_number":201,"context_line":"        if not policy.check(((\"image\", \"publicize_image\"),), request):"},{"line_number":202,"context_line":"            self._hide_is_public()"},{"line_number":203,"context_line":"        # NOTE: GlanceV2 doesn\u0027t support copy-from feature, sorry!"}],"source_content_type":"text/x-python","patch_set":23,"id":"bacf61ea_a5166049","line":200,"in_reply_to":"bacf61ea_2d167255","updated":"2016-08-01 22:15:00.000000000","message":"Good catch! Fixed in the latest patchset.","commit_id":"992df7fcfc463b1f5000d6f3d44ebdf8ee27cfb2"}],"openstack_dashboard/static/app/core/images/steps/edit-image/edit-image.controller.js":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"1625c7491e496b576510aced604242263a0676fb","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    function init(response) {"},{"line_number":78,"context_line":"      var uneditableProperties \u003d [\u0027file\u0027, \u0027locations\u0027, \u0027schema\u0027, \u0027tags\u0027,"},{"line_number":79,"context_line":"                                  \u0027virtual_size\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":80,"context_line":"                                  \u0027image_url\u0027];"},{"line_number":81,"context_line":"      uneditableProperties.forEach( function removeUneditable(prop) {"}],"source_content_type":"text/javascript","patch_set":43,"id":"1ac06dbe_142aa22c","line":78,"updated":"2016-08-21 03:55:09.000000000","message":"I\u0027m not sure if I\u0027m on the right track here. What I need to do is filter out certain metadata items so they don\u0027t appear as editable to the user. But when I remove them in this way, Horizon thinks the user is trying to remove them. I think I need to remove them at a lower level.","commit_id":"5c2538b902907a4ae4be235a49a92439b6299ecb"}],"openstack_dashboard/static/app/core/metadata/metadata.service.js":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"51217c6ca72e899e4a0881a4cccd3615d1019215","unresolved":false,"context_lines":[{"line_number":103,"context_line":"     * some properties will potentially be removed."},{"line_number":104,"context_line":"     */"},{"line_number":105,"context_line":"    function filterUneditableProps(properties) {"},{"line_number":106,"context_line":"      var uneditableProperties \u003d [\u0027file\u0027, \u0027locations\u0027, \u0027schema\u0027, \u0027tags\u0027,"},{"line_number":107,"context_line":"                                  \u0027virtual_size\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":108,"context_line":"                                  \u0027image_url\u0027];"},{"line_number":109,"context_line":"      uneditableProperties.forEach( function removeUneditable(prop) {"},{"line_number":110,"context_line":"        if (prop in properties) {"},{"line_number":111,"context_line":"          delete properties[prop];"}],"source_content_type":"text/javascript","patch_set":49,"id":"fa7ab95a_169445e0","line":108,"range":{"start_line":106,"start_character":6,"end_line":108,"end_character":47},"updated":"2016-09-01 15:19:30.000000000","message":"I\u0027m a bit uncertain about having this list hardcoded at client-side... Would it be better to retrieve it from Horizon server-side, where it is configurable? The answer depends on how permanent this set of keys is.\n\nI made an attempt to move the whole set of these properties to server-side, could you please take a look at my follow-up patch https://review.openstack.org/#/c/364316/ ?","commit_id":"b8910d1d0cf3d0ef442b7195ffaf4e3c8d87b27d"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"b772ee065f1a63cc414536a99ad983f9ee2a9bfd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"     * some properties will potentially be removed."},{"line_number":104,"context_line":"     */"},{"line_number":105,"context_line":"    function filterUneditableProps(properties) {"},{"line_number":106,"context_line":"      var uneditableProperties \u003d [\u0027file\u0027, \u0027locations\u0027, \u0027schema\u0027, \u0027tags\u0027,"},{"line_number":107,"context_line":"                                  \u0027virtual_size\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":108,"context_line":"                                  \u0027image_url\u0027];"},{"line_number":109,"context_line":"      uneditableProperties.forEach( function removeUneditable(prop) {"},{"line_number":110,"context_line":"        if (prop in properties) {"},{"line_number":111,"context_line":"          delete properties[prop];"}],"source_content_type":"text/javascript","patch_set":49,"id":"fa7ab95a_892c8f9a","line":108,"range":{"start_line":106,"start_character":6,"end_line":108,"end_character":47},"in_reply_to":"fa7ab95a_169445e0","updated":"2016-09-02 00:19:44.000000000","message":"I think it would be better to have this on the server side also. But there were some issues with the approach in 364316 that I commented in that one.\n\nWhat might work is to put the list of omitted properties into api/glance.py as a separate attribute to the image properties, and then get the list in the filterUneditableProps function from the properties. That at least would allow us to manage the list in the server side code.\n\nDoes that sound reasonable?","commit_id":"b8910d1d0cf3d0ef442b7195ffaf4e3c8d87b27d"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"51217c6ca72e899e4a0881a4cccd3615d1019215","unresolved":false,"context_lines":[{"line_number":106,"context_line":"      var uneditableProperties \u003d [\u0027file\u0027, \u0027locations\u0027, \u0027schema\u0027, \u0027tags\u0027,"},{"line_number":107,"context_line":"                                  \u0027virtual_size\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":108,"context_line":"                                  \u0027image_url\u0027];"},{"line_number":109,"context_line":"      uneditableProperties.forEach( function removeUneditable(prop) {"},{"line_number":110,"context_line":"        if (prop in properties) {"},{"line_number":111,"context_line":"          delete properties[prop];"},{"line_number":112,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":49,"id":"fa7ab95a_76f1116a","line":109,"range":{"start_line":109,"start_character":35,"end_line":109,"end_character":36},"updated":"2016-09-01 15:19:30.000000000","message":"space looks unnecessary, but not mandatory to fix unless you make another patchset.","commit_id":"b8910d1d0cf3d0ef442b7195ffaf4e3c8d87b27d"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"b772ee065f1a63cc414536a99ad983f9ee2a9bfd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"      var uneditableProperties \u003d [\u0027file\u0027, \u0027locations\u0027, \u0027schema\u0027, \u0027tags\u0027,"},{"line_number":107,"context_line":"                                  \u0027virtual_size\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":108,"context_line":"                                  \u0027image_url\u0027];"},{"line_number":109,"context_line":"      uneditableProperties.forEach( function removeUneditable(prop) {"},{"line_number":110,"context_line":"        if (prop in properties) {"},{"line_number":111,"context_line":"          delete properties[prop];"},{"line_number":112,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":49,"id":"fa7ab95a_89c00f52","line":109,"range":{"start_line":109,"start_character":35,"end_line":109,"end_character":36},"in_reply_to":"fa7ab95a_76f1116a","updated":"2016-09-02 00:19:44.000000000","message":"Yeah, that\u0027s unnecessary. I\u0027ll remove it in the next PS.","commit_id":"b8910d1d0cf3d0ef442b7195ffaf4e3c8d87b27d"}],"openstack_dashboard/test/integration_tests/pages/project/compute/imagespage.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"2fbd217e1f2b740e8de981c07c77bd2398be63cc","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        create_image_form.name.text \u003d name"},{"line_number":125,"context_line":"        if description is not None:"},{"line_number":126,"context_line":"            create_image_form.description.text \u003d description"},{"line_number":127,"context_line":"        # TODO(bpokorny): Add back the logic for specifying a location once"},{"line_number":128,"context_line":"        # GlanceV2 supports it by default. See bug #1595335."},{"line_number":129,"context_line":"        create_image_form.image_file.choose(image_file)"},{"line_number":130,"context_line":"        create_image_form.disk_format.value \u003d image_format"},{"line_number":131,"context_line":"        if is_public:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bacf61ea_b658fffb","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":60},"updated":"2016-07-28 13:20:18.000000000","message":"Let\u0027s not remove the existing logic (see removed code on left side for patchset#12), and just change DEFAULT_IMAGE_SOURCE to \u0027file\u0027 instead.","commit_id":"992df7fcfc463b1f5000d6f3d44ebdf8ee27cfb2"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"0042a0d116b5165131d562a7552387d89af05b52","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        create_image_form.name.text \u003d name"},{"line_number":125,"context_line":"        if description is not None:"},{"line_number":126,"context_line":"            create_image_form.description.text \u003d description"},{"line_number":127,"context_line":"        # TODO(bpokorny): Add back the logic for specifying a location once"},{"line_number":128,"context_line":"        # GlanceV2 supports it by default. See bug #1595335."},{"line_number":129,"context_line":"        create_image_form.image_file.choose(image_file)"},{"line_number":130,"context_line":"        create_image_form.disk_format.value \u003d image_format"},{"line_number":131,"context_line":"        if is_public:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bacf61ea_85119c54","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":60},"in_reply_to":"bacf61ea_b658fffb","updated":"2016-08-01 22:15:00.000000000","message":"Done","commit_id":"992df7fcfc463b1f5000d6f3d44ebdf8ee27cfb2"}]}
