)]}'
{"openstack_dashboard/api/base.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"75ef807300a0f83cc3e573974d8f37b9c6e47cd7","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class APIVersionManager(object):"},{"line_number":37,"context_line":"    \"\"\" Object to store and manage API versioning data and utility methods. \"\"\""},{"line_number":38,"context_line":"    def __init__(self, name, preferred_version\u003dNone):"},{"line_number":39,"context_line":"        self.preferred \u003d preferred_version"},{"line_number":40,"context_line":"        self._active \u003d None"},{"line_number":41,"context_line":"        self.supported \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fm9Q%3D","line":38,"updated":"2013-05-02 22:41:49.000000000","message":"name argument is not used, should it be stored as class attribute?","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"aee3b0807c63db457b4acdfdf50985780f545664","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class APIVersionManager(object):"},{"line_number":37,"context_line":"    \"\"\" Object to store and manage API versioning data and utility methods. \"\"\""},{"line_number":38,"context_line":"    def __init__(self, name, preferred_version\u003dNone):"},{"line_number":39,"context_line":"        self.preferred \u003d preferred_version"},{"line_number":40,"context_line":"        self._active \u003d None"},{"line_number":41,"context_line":"        self.supported \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlQo%3D","line":38,"in_reply_to":"AAAAOn%2F%2Fm9Q%3D","updated":"2013-05-02 22:47:52.000000000","message":"yes. yes it should. ;-)","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"75ef807300a0f83cc3e573974d8f37b9c6e47cd7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def get_active_version(self):"},{"line_number":53,"context_line":"        if self._active is not None:"},{"line_number":54,"context_line":"            return self.supported[self._active]"},{"line_number":55,"context_line":"        key \u003d getattr(settings, \"OPENSTACK_API_VERSIONS\", {}).get(\"identity\")"},{"line_number":56,"context_line":"        if key is None:"},{"line_number":57,"context_line":"            # TODO: support API version discovery here; we\u0027ll leave the setting"},{"line_number":58,"context_line":"            # in as a way of overriding the latest available version."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlSI%3D","line":55,"updated":"2013-05-02 22:41:49.000000000","message":"I think this is where the name from the constructor should be used instead of hardcoding \"identity\". :)","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"aee3b0807c63db457b4acdfdf50985780f545664","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def get_active_version(self):"},{"line_number":53,"context_line":"        if self._active is not None:"},{"line_number":54,"context_line":"            return self.supported[self._active]"},{"line_number":55,"context_line":"        key \u003d getattr(settings, \"OPENSTACK_API_VERSIONS\", {}).get(\"identity\")"},{"line_number":56,"context_line":"        if key is None:"},{"line_number":57,"context_line":"            # TODO: support API version discovery here; we\u0027ll leave the setting"},{"line_number":58,"context_line":"            # in as a way of overriding the latest available version."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlQk%3D","line":55,"in_reply_to":"AAAAOn%2F%2FlSI%3D","updated":"2013-05-02 22:47:52.000000000","message":"totally right. I meant to do this after I refactored my proof-of-concept to be reusable and missed it.","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"}],"openstack_dashboard/api/keystone.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"75ef807300a0f83cc3e573974d8f37b9c6e47cd7","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                            endpoint\u003dendpoint,"},{"line_number":164,"context_line":"                                            original_ip\u003dremote_addr,"},{"line_number":165,"context_line":"                                            insecure\u003dinsecure,"},{"line_number":166,"context_line":"                                            debug\u003dsettings.DEBUG)"},{"line_number":167,"context_line":"        setattr(request, cache_attr, conn)"},{"line_number":168,"context_line":"    return conn"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlRs%3D","line":166,"updated":"2013-05-02 22:41:49.000000000","message":"Thanks for passing the DEBUG here, this have been here earlier.","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1ebab7cd05c590387043065abd0be2bfa279ac8e","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                              enabled\u003denabled)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def tenant_get(request, project, admin\u003dFalse):"},{"line_number":182,"context_line":"    manager \u003d VERSIONS.get_project_manager(request, admin\u003dTrue)"},{"line_number":183,"context_line":"    return manager.get(project)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2Fle0%3D","line":181,"updated":"2013-05-02 22:05:04.000000000","message":"param for admin, but don\u0027t use that value passed in just passing True","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"9b4adec29491b98fcdefa313fff3256cc9d31a4b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                              enabled\u003denabled)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def tenant_get(request, project, admin\u003dFalse):"},{"line_number":182,"context_line":"    manager \u003d VERSIONS.get_project_manager(request, admin\u003dTrue)"},{"line_number":183,"context_line":"    return manager.get(project)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlSM%3D","line":181,"in_reply_to":"AAAAOn%2F%2Fle0%3D","updated":"2013-05-02 22:29:08.000000000","message":"good catch. lemme fix that.","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"75ef807300a0f83cc3e573974d8f37b9c6e47cd7","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"def user_update_password(request, user_id, password, admin\u003dTrue):"},{"line_number":306,"context_line":"    return keystoneclient(request, admin\u003dadmin).users.update_password(user_id,"},{"line_number":307,"context_line":"                                                                      password)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlRY%3D","line":306,"updated":"2013-05-02 22:41:49.000000000","message":"For some reason keystoneclient V3 does not have update_password method available","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"aee3b0807c63db457b4acdfdf50985780f545664","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"def user_update_password(request, user_id, password, admin\u003dTrue):"},{"line_number":306,"context_line":"    return keystoneclient(request, admin\u003dadmin).users.update_password(user_id,"},{"line_number":307,"context_line":"                                                                      password)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlQc%3D","line":306,"in_reply_to":"AAAAOn%2F%2FlRY%3D","updated":"2013-05-02 22:47:52.000000000","message":"That\u0027s correct. In v3 it\u0027s part of the core users.update method. The Horizon code only uses this method under v2 conditions, but it might be worth adding in a v3-compatible version of this method as well in case someone wants to use it in the future.","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"}],"openstack_dashboard/test/api_tests/keystone_tests.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"1ebab7cd05c590387043065abd0be2bfa279ac8e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        keystoneclient.roles.roles_for_user(self.user.id,"},{"line_number":67,"context_line":"                                            tenant.id).AndReturn(self.roles)"},{"line_number":68,"context_line":"        for role in self.roles:"},{"line_number":69,"context_line":"            keystoneclient.roles.revoke(role.id,"},{"line_number":70,"context_line":"                                        domain\u003dNone,"},{"line_number":71,"context_line":"                                        group\u003dNone,"},{"line_number":72,"context_line":"                                        project\u003dtenant.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlfQ%3D","line":69,"updated":"2013-05-02 22:05:04.000000000","message":"This test is the only one that fails if you set the identity version to 2.0 in  openstack_dashboard/test/settings.py   The code handles it properly though.  Not sure this is a requirement for commiting this change, but it does make me think that if this is the only test that fails with this switch, the coverage of the keystone api is fairly sparse :)","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"39749b496aca55dee214a1c62f36f4dc56996bf4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        keystoneclient.roles.roles_for_user(self.user.id,"},{"line_number":67,"context_line":"                                            tenant.id).AndReturn(self.roles)"},{"line_number":68,"context_line":"        for role in self.roles:"},{"line_number":69,"context_line":"            keystoneclient.roles.revoke(role.id,"},{"line_number":70,"context_line":"                                        domain\u003dNone,"},{"line_number":71,"context_line":"                                        group\u003dNone,"},{"line_number":72,"context_line":"                                        project\u003dtenant.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlR0%3D","line":69,"in_reply_to":"AAAAOn%2F%2FlSU%3D","updated":"2013-05-02 22:31:55.000000000","message":"That\u0027s fine.  I had checked the code and noted the logic was correctly handling the different versions.  I was just surprised there was only one case that was hit.","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"9b4adec29491b98fcdefa313fff3256cc9d31a4b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        keystoneclient.roles.roles_for_user(self.user.id,"},{"line_number":67,"context_line":"                                            tenant.id).AndReturn(self.roles)"},{"line_number":68,"context_line":"        for role in self.roles:"},{"line_number":69,"context_line":"            keystoneclient.roles.revoke(role.id,"},{"line_number":70,"context_line":"                                        domain\u003dNone,"},{"line_number":71,"context_line":"                                        group\u003dNone,"},{"line_number":72,"context_line":"                                        project\u003dtenant.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlSU%3D","line":69,"in_reply_to":"AAAAOn%2F%2FlfQ%3D","updated":"2013-05-02 22:29:08.000000000","message":"Our goal with testing has been to avoid testing the clients themselves. In general we use mocking to sever Horizon from client calls. This has some pros and cons, but in general if we\u0027re going to test clients we should do so with functional integration tests. No point in unit testing them. They\u0027re already unit tested. The reason this one breaks is that this method (in the v2 API) had reasons we wanted to test it explicitly, and in v3 it was renamed. In theory we could alter the test to operate in either mode, but I\u0027m not sure it adds a lot of immediate value...","commit_id":"8f66a2ab5e775d7dd23530115de1c269a1066bd1"}]}
