)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"acaa04d716a80d9ce1c544792aa729e58a4cbe75","unresolved":false,"context_lines":[{"line_number":10,"context_line":"on the \"email\" field when creating a new user if the field"},{"line_number":11,"context_line":"isn\u0027t filled by the user."},{"line_number":12,"context_line":"To match the keystone client behaviour, instead of sending"},{"line_number":13,"context_line":"an emtpy string, this patch sends an \"None\" value when the"},{"line_number":14,"context_line":"field isn\u0027t filled by the user."},{"line_number":15,"context_line":"By doing this, when creating a new user from both,"},{"line_number":16,"context_line":"keystone client and horizon, a \"null\" value is stored"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FyUE%3D","line":13,"updated":"2014-01-08 13:55:02.000000000","message":"emtpy -\u003e empty\n\nan None -\u003e a None","commit_id":"3deab0badebf45c64d93370a270fd27204cdcad4"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"0ef1302c4c2c4779b91c9d048aa810a9b8c896b4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"on the \"email\" field when creating a new user if the field"},{"line_number":11,"context_line":"isn\u0027t filled by the user."},{"line_number":12,"context_line":"To match the keystone client behaviour, instead of sending"},{"line_number":13,"context_line":"an emtpy string, this patch sends an \"None\" value when the"},{"line_number":14,"context_line":"field isn\u0027t filled by the user."},{"line_number":15,"context_line":"By doing this, when creating a new user from both,"},{"line_number":16,"context_line":"keystone client and horizon, a \"null\" value is stored"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FwnM%3D","line":13,"in_reply_to":"AAAAUH%2F%2FyUE%3D","updated":"2014-01-08 19:31:19.000000000","message":"Thanks Ana! \nFixed...","commit_id":"3deab0badebf45c64d93370a270fd27204cdcad4"},{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"acaa04d716a80d9ce1c544792aa729e58a4cbe75","unresolved":false,"context_lines":[{"line_number":17,"context_line":"under the same conditions."},{"line_number":18,"context_line":"in the database. This will maintain the data consistency."},{"line_number":19,"context_line":"From the presentation point of view, when a \"null\" value"},{"line_number":20,"context_line":"is received, it is presented as an \"empty\" string instead"},{"line_number":21,"context_line":"of showing \"None\" on the \"email\" field of the users table."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: Ib5df774b3fe9d82c084f380c9c11aea46b2984aa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FyTY%3D","line":20,"updated":"2014-01-08 13:55:02.000000000","message":"quotes are not needed here","commit_id":"3deab0badebf45c64d93370a270fd27204cdcad4"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"0ef1302c4c2c4779b91c9d048aa810a9b8c896b4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"under the same conditions."},{"line_number":18,"context_line":"in the database. This will maintain the data consistency."},{"line_number":19,"context_line":"From the presentation point of view, when a \"null\" value"},{"line_number":20,"context_line":"is received, it is presented as an \"empty\" string instead"},{"line_number":21,"context_line":"of showing \"None\" on the \"email\" field of the users table."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: Ib5df774b3fe9d82c084f380c9c11aea46b2984aa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FwnI%3D","line":20,"in_reply_to":"AAAAUH%2F%2FyTY%3D","updated":"2014-01-08 19:31:19.000000000","message":"Thanks Ana! \nFixed...","commit_id":"3deab0badebf45c64d93370a270fd27204cdcad4"}],"openstack_dashboard/dashboards/admin/users/forms.py":[{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"97ef7aa9010c49279c849b9f8de0c109183c89e6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            LOG.info(\u0027Creating user with name \"%s\"\u0027 % data[\u0027name\u0027])"},{"line_number":118,"context_line":"            if not data[\u0027email\u0027]:"},{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"},{"line_number":122,"context_line":"                                                email\u003ddata[\u0027email\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2F6NE%3D","line":119,"updated":"2014-01-06 22:38:51.000000000","message":"You can do this in one line:\ndata[\u0027email\u0027] \u003d data[\u0027email\u0027] or None","commit_id":"aa5fa49e8bb530bfd853d3c958efe12d7c8dc9c9"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"b136e19d7f2a935625ab937d0ef6407dcb54f8e1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            LOG.info(\u0027Creating user with name \"%s\"\u0027 % data[\u0027name\u0027])"},{"line_number":118,"context_line":"            if not data[\u0027email\u0027]:"},{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"},{"line_number":122,"context_line":"                                                email\u003ddata[\u0027email\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2F2z8%3D","line":119,"in_reply_to":"AAAAUH%2F%2F6NE%3D","updated":"2014-01-07 16:12:32.000000000","message":"Great !\nHave just changed...thanks !","commit_id":"aa5fa49e8bb530bfd853d3c958efe12d7c8dc9c9"},{"author":{"_account_id":9412,"name":"Andres Buraschi","email":"andres.buraschi@intel.com","username":"aburaschi"},"change_message_id":"7f6a35e1a53e0e21b73f1b733aa89ef802c4c085","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        domain \u003d api.keystone.get_default_domain(self.request)"},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            LOG.info(\u0027Creating user with name \"%s\"\u0027 % data[\u0027name\u0027])"},{"line_number":118,"context_line":"            if \"email\" in data:"},{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FKaE%3D","line":118,"updated":"2014-01-16 20:46:38.000000000","message":"Not needed, right? But does no harm, anyway.","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1b4a5b8857c9a0fe1092f68a46713d24da87ffe1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        domain \u003d api.keystone.get_default_domain(self.request)"},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            LOG.info(\u0027Creating user with name \"%s\"\u0027 % data[\u0027name\u0027])"},{"line_number":118,"context_line":"            if \"email\" in data:"},{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BWzY%3D","line":118,"in_reply_to":"AAAAUH%2F%2FKaE%3D","updated":"2014-01-27 19:01:46.000000000","message":"remove these two lines","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1b4a5b8857c9a0fe1092f68a46713d24da87ffe1","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"},{"line_number":122,"context_line":"                                                email\u003ddata[\u0027email\u0027],"},{"line_number":123,"context_line":"                                                password\u003ddata[\u0027password\u0027],"},{"line_number":124,"context_line":"                                                project\u003ddata[\u0027project\u0027],"},{"line_number":125,"context_line":"                                                enabled\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BWzw%3D","line":122,"updated":"2014-01-27 19:01:46.000000000","message":"email \u003d data.get(\u0027email\u0027) instead","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"2fb9c401245932adb9ce6d8dbe9fb53607106c24","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"},{"line_number":122,"context_line":"                                                email\u003ddata[\u0027email\u0027],"},{"line_number":123,"context_line":"                                                password\u003ddata[\u0027password\u0027],"},{"line_number":124,"context_line":"                                                project\u003ddata[\u0027project\u0027],"},{"line_number":125,"context_line":"                                                enabled\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fbkw%3D","line":122,"in_reply_to":"AAAAUH%2F%2BRA8%3D","updated":"2014-02-26 17:27:29.000000000","message":"Sounds good.","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"d5446f5910c611c4dc27df56daf69414bf1d6d1f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":120,"context_line":"            new_user \u003d api.keystone.user_create(request,"},{"line_number":121,"context_line":"                                                name\u003ddata[\u0027name\u0027],"},{"line_number":122,"context_line":"                                                email\u003ddata[\u0027email\u0027],"},{"line_number":123,"context_line":"                                                password\u003ddata[\u0027password\u0027],"},{"line_number":124,"context_line":"                                                project\u003ddata[\u0027project\u0027],"},{"line_number":125,"context_line":"                                                enabled\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BRA8%3D","line":122,"in_reply_to":"AAAAUH%2F%2BWzw%3D","updated":"2014-01-28 15:23:37.000000000","message":"Hi David, I agree on removing the two lines above.\nRegarding this line, I think it is not considering the case where we receive an empty string (\"\"). When the user does not introduce the email in the form,  \u003c data.get(\u0027email\u0027) \u003e will obtain the value as an empty string (\"\"). Also, if we set a default value, \u003c data.get(\u0027email\u0027, \u0027default\u0027) \u003e will obtain the value as an empty string (\"\"). To match the keystone client behaviour, instead of sending an empty string, we want to send a \"None\" value when the field isn\u0027t filled by the user. I can add a condition to this line to set as None in the case of an empty string, \u003c data.get(\u0027email\u0027) or None \u003e. What do you think? I couldn\u0027t find any other way of doing this...\nTxs!","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1b4a5b8857c9a0fe1092f68a46713d24da87ffe1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        data.pop(\u0027domain_name\u0027)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            if \"email\" in data:"},{"line_number":196,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":197,"context_line":"            response \u003d api.keystone.user_update(request, user, **data)"},{"line_number":198,"context_line":"            messages.success(request,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BWxk%3D","line":195,"updated":"2014-01-27 19:01:46.000000000","message":"if \"email\" not in data:","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"d5446f5910c611c4dc27df56daf69414bf1d6d1f","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        data.pop(\u0027domain_name\u0027)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            if \"email\" in data:"},{"line_number":196,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":197,"context_line":"            response \u003d api.keystone.user_update(request, user, **data)"},{"line_number":198,"context_line":"            messages.success(request,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BQ7g%3D","line":195,"in_reply_to":"AAAAUH%2F%2BWxk%3D","updated":"2014-01-28 15:23:37.000000000","message":"Hi David, I think this won\u0027t consider the case where we receive an empty string (\"\").\nThis line is added because an update from the keystone client could not be sending the email key. If the update is done from horizon, then I\u0027ll check if it is an empty string or not.","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1b4a5b8857c9a0fe1092f68a46713d24da87ffe1","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            if \"email\" in data:"},{"line_number":196,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":197,"context_line":"            response \u003d api.keystone.user_update(request, user, **data)"},{"line_number":198,"context_line":"            messages.success(request,"},{"line_number":199,"context_line":"                             _(\u0027User has been updated successfully.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BWxg%3D","line":196,"updated":"2014-01-27 19:01:46.000000000","message":"data[\u0027email\u0027] \u003d None","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"d5446f5910c611c4dc27df56daf69414bf1d6d1f","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            if \"email\" in data:"},{"line_number":196,"context_line":"                data[\u0027email\u0027] \u003d data[\u0027email\u0027] or None"},{"line_number":197,"context_line":"            response \u003d api.keystone.user_update(request, user, **data)"},{"line_number":198,"context_line":"            messages.success(request,"},{"line_number":199,"context_line":"                             _(\u0027User has been updated successfully.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BQ7E%3D","line":196,"in_reply_to":"AAAAUH%2F%2BWxg%3D","updated":"2014-01-28 15:23:37.000000000","message":"Same comment as my previous one.\nI would not change this, except there is another cleaner way of doing the same checking. Thoughts?\nTxs!","commit_id":"311bbd7d16451e53775d316d0e45e1b47711c358"}],"openstack_dashboard/dashboards/admin/users/tests.py":[{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"53a35f531820f597ed6480a07b1fc7708154e2ea","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.mox.ReplayAll()"},{"line_number":80,"context_line":"        res \u003d self.client.get(USERS_INDEX_URL)"},{"line_number":81,"context_line":"        self.assertItemsEqual(res.context[\u0027table\u0027].data[4].email, \"\")"},{"line_number":82,"context_line":"        self.assertItemsEqual(res.context[\u0027table\u0027].data[0].email, \"test@example.com\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_index_with_domain(self):"},{"line_number":85,"context_line":"        domain \u003d self.domains.get(id\u003d\"1\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FwgE%3D","line":82,"updated":"2014-01-08 19:55:43.000000000","message":"This line is too long (failing pep8). You can just remove it, as it is not related to what we want to test here. The line above it is sufficient.","commit_id":"1fee2fc0e8db19582a47894bdca4e70d27375c01"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"258a0e2f383f6773ecfd3a9ddda5e34d344ab1dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        domain_id \u003d domain.id"},{"line_number":75,"context_line":"        users \u003d self._get_users(domain_id)"},{"line_number":76,"context_line":"        api.keystone.user_list(IgnoreArg(), domain\u003ddomain_id) \\"},{"line_number":77,"context_line":"                .AndReturn(users)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.mox.ReplayAll()"},{"line_number":80,"context_line":"        res \u003d self.client.get(USERS_INDEX_URL)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Frzc%3D","line":77,"updated":"2014-01-09 16:30:16.000000000","message":"Strange indentation here.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":9313,"name":"alejandro emanuel paredes","email":"alejandro.e.paredes@intel.com","username":"aeparede"},"change_message_id":"8d1c96da4555289e52c7742137bda5a61bcada8a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        domain_id \u003d domain.id"},{"line_number":75,"context_line":"        users \u003d self._get_users(domain_id)"},{"line_number":76,"context_line":"        api.keystone.user_list(IgnoreArg(), domain\u003ddomain_id) \\"},{"line_number":77,"context_line":"                .AndReturn(users)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.mox.ReplayAll()"},{"line_number":80,"context_line":"        res \u003d self.client.get(USERS_INDEX_URL)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FYIw%3D","line":77,"in_reply_to":"AAAAUH%2F%2FZyc%3D","updated":"2014-01-14 13:24:41.000000000","message":"Hi Zhenguo, I\u0027m afraid this test was not needed anymore in patch 5 as I moved the presentation change to a template filter... anyway I\u0027ll update the indetation of the added tests...\nthanks!","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"1bfb05b10cbd8c60d3c3e45613ee65219e6ce691","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        domain_id \u003d domain.id"},{"line_number":75,"context_line":"        users \u003d self._get_users(domain_id)"},{"line_number":76,"context_line":"        api.keystone.user_list(IgnoreArg(), domain\u003ddomain_id) \\"},{"line_number":77,"context_line":"                .AndReturn(users)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.mox.ReplayAll()"},{"line_number":80,"context_line":"        res \u003d self.client.get(USERS_INDEX_URL)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FZyc%3D","line":77,"in_reply_to":"AAAAUH%2F%2Frzc%3D","updated":"2014-01-14 04:38:37.000000000","message":"Was it just copied from test above?  can you please fix both of them.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":7976,"name":"Maxime Vidori","email":"mvidori@redhat.com","username":"MaxV"},"change_message_id":"0bc6c7f7cff7cfcbcd4c0f9ca67ac1397d779065","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        user \u003d self.users.get(id\u003d\"5\")"},{"line_number":147,"context_line":"        domain \u003d self._get_default_domain()"},{"line_number":148,"context_line":"        domain_id \u003d domain.id"},{"line_number":149,"context_line":"        role \u003d self.roles.first()"},{"line_number":150,"context_line":"        api.keystone.get_default_domain(IgnoreArg()) \\"},{"line_number":151,"context_line":"            .MultipleTimes().AndReturn(domain)"},{"line_number":152,"context_line":"        api.keystone.tenant_list(IgnoreArg(), domain\u003ddomain_id, user\u003dNone) \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FnT4%3D","line":149,"updated":"2014-01-10 13:46:58.000000000","message":"same comment as Tatiana for the next four lines, indent at the parenthesis opening","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1bf48a4e1993337d6249fe6ca49d3f07a1ee126f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        user \u003d self.users.get(id\u003d\"5\")"},{"line_number":147,"context_line":"        domain \u003d self._get_default_domain()"},{"line_number":148,"context_line":"        domain_id \u003d domain.id"},{"line_number":149,"context_line":"        role \u003d self.roles.first()"},{"line_number":150,"context_line":"        api.keystone.get_default_domain(IgnoreArg()) \\"},{"line_number":151,"context_line":"            .MultipleTimes().AndReturn(domain)"},{"line_number":152,"context_line":"        api.keystone.tenant_list(IgnoreArg(), domain\u003ddomain_id, user\u003dNone) \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FnK0%3D","line":149,"in_reply_to":"AAAAUH%2F%2FnT4%3D","updated":"2014-01-10 14:01:13.000000000","message":"Maxime, I think this indentation is correct: there are two opening and two closing parenthesis at L#149. However backslashes here and below are unnecessary and could be avoided.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"}],"openstack_dashboard/dashboards/admin/users/views.py":[{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"4d2a32b3e00b8758ebb2fb92a6d543e4f59e1d18","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                           domain\u003ddomain_context)"},{"line_number":52,"context_line":"            for user in users:"},{"line_number":53,"context_line":"                if user.email is None:"},{"line_number":54,"context_line":"                    user.email \u003d \"\""},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            exceptions.handle(self.request,"},{"line_number":57,"context_line":"                              _(\u0027Unable to retrieve user list.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FrYE%3D","line":54,"updated":"2014-01-09 18:06:57.000000000","message":"Personally I would prefer to still see \"None\" if the attribute is not set / null. I think it\u0027s more accurate, and it can mean something different depending on the backend (e.g. it\u0027s possible an attribute can be changed, but cannot be set if it doesn\u0027t already exist).","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"f25f79ec9339977ae1ba564d34ba271032058c45","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                           domain\u003ddomain_context)"},{"line_number":52,"context_line":"            for user in users:"},{"line_number":53,"context_line":"                if user.email is None:"},{"line_number":54,"context_line":"                    user.email \u003d \"\""},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            exceptions.handle(self.request,"},{"line_number":57,"context_line":"                              _(\u0027Unable to retrieve user list.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fm6U%3D","line":54,"in_reply_to":"AAAAUH%2F%2FnPc%3D","updated":"2014-01-10 14:50:24.000000000","message":"Good point. Agree with Maxime here, we should definitely make use of the default_if_none filter.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":4978,"name":"Julie Pichon","email":"jpichon@redhat.com","username":"jpichon"},"change_message_id":"a20e60d37c1c4ffcc57121b56061dd81ac066342","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                           domain\u003ddomain_context)"},{"line_number":52,"context_line":"            for user in users:"},{"line_number":53,"context_line":"                if user.email is None:"},{"line_number":54,"context_line":"                    user.email \u003d \"\""},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            exceptions.handle(self.request,"},{"line_number":57,"context_line":"                              _(\u0027Unable to retrieve user list.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FnJ8%3D","line":54,"in_reply_to":"AAAAUH%2F%2FnPc%3D","updated":"2014-01-10 14:03:50.000000000","message":"I know seeing \"None\" instead of \"\" has been helpful to me in the past, but I don\u0027t strongly mind either way. I agree with Maxime that this would be more appropriate as a filter on the template.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":7976,"name":"Maxime Vidori","email":"mvidori@redhat.com","username":"MaxV"},"change_message_id":"0bc6c7f7cff7cfcbcd4c0f9ca67ac1397d779065","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                           domain\u003ddomain_context)"},{"line_number":52,"context_line":"            for user in users:"},{"line_number":53,"context_line":"                if user.email is None:"},{"line_number":54,"context_line":"                    user.email \u003d \"\""},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            exceptions.handle(self.request,"},{"line_number":57,"context_line":"                              _(\u0027Unable to retrieve user list.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FnPc%3D","line":54,"in_reply_to":"AAAAUH%2F%2FnxE%3D","updated":"2014-01-10 13:46:58.000000000","message":"This code is pretty messy and I do not think it is the role of this view to handle this kind of issues. \n\nAdding a filter in /openstack_dashboard/dashboards/admin/users/tables.py line 132 must be a better workaround, there is also an existing filter in django https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default-if-none","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"},{"author":{"_account_id":9317,"name":"Ana Krivokapic","email":"akrivoka@redhat.com","username":"akrivoka"},"change_message_id":"e5400e89c2ecf46b4dfa916993009ea14bb3a851","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                           domain\u003ddomain_context)"},{"line_number":52,"context_line":"            for user in users:"},{"line_number":53,"context_line":"                if user.email is None:"},{"line_number":54,"context_line":"                    user.email \u003d \"\""},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            exceptions.handle(self.request,"},{"line_number":57,"context_line":"                              _(\u0027Unable to retrieve user list.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FnxE%3D","line":54,"in_reply_to":"AAAAUH%2F%2FrYE%3D","updated":"2014-01-10 11:59:21.000000000","message":"I disagree. This piece of code deals only with the way the value is presented to the user. Users should be able to use the UI, without necessarily knowing/caring about the db backend. Besides, \u0027None\u0027  (as opposed to just empty value) is not giving out any additional information about that.\n\nI think displaying null/None as an empty value is pretty standard in UIs. Putting the string \u0027None\u0027 everywhere where there\u0027s a missing value would unnecessarily clutter the UI, not to mention it would be harder to spot empty values.","commit_id":"7312a1f86d4552430ff34d7802360236c5ebf37d"}]}
