)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"dbce406cc16a138cd135543a3e1c2f4e55ae3fec","unresolved":false,"context_lines":[{"line_number":13,"context_line":"at least document the expected numbers.  LDAP will not support"},{"line_number":14,"context_line":"a project for the domain, but SQL will, and there are tests that mix"},{"line_number":15,"context_line":"both together."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I8bdff22e20d672d05a732723c9a35f87ba0f0063"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a930d6b_355902ff","line":16,"updated":"2015-01-22 02:49:49.000000000","message":"need the link of bp.","commit_id":"6874e21e0f07db263ff04c8a89994a1c3bcadc6e"}],"keystone/assignment/core.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"536b7d8d09d3bccf3c6c62dee49067f12f834b6f","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        root_project \u003d {"},{"line_number":432,"context_line":"            \u0027id\u0027: domain_id,"},{"line_number":433,"context_line":"            \u0027name\u0027: domain[\u0027name\u0027],"},{"line_number":434,"context_line":"            \u0027description\u0027: \u0027domain root project\u0027,"},{"line_number":435,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":436,"context_line":"            \u0027enabled\u0027: True}"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_6374c6cf","line":434,"updated":"2015-01-21 17:16:40.000000000","message":"I think that we can use the domain[\u0027extra\u0027] collumn and verify if exists some description here.","commit_id":"6874e21e0f07db263ff04c8a89994a1c3bcadc6e"}],"keystone/common/sql/migrate_repo/versions/076_migrate_domains_to_projects.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"449fc1db4cff69f6f2049b62313a2a398bbc3711","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"9a41bdd9_9dd049cb","line":47,"updated":"2015-07-19 09:57:46.000000000","message":"...this would be None, if we went ahead with the new proposal.","commit_id":"2b5e92602017226db93b1c801c1ffc8e313e1f07"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"2ba072595729efc89b59414174e574eeb50a751c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"3a50d1a3_2e4d8972","line":47,"in_reply_to":"3a50d1a3_f713f70b","updated":"2015-07-20 02:57:59.000000000","message":"done on the previous patch (Change project name constraint)","commit_id":"2b5e92602017226db93b1c801c1ffc8e313e1f07"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"bd9a23e937beaeb008559436d88a8607f9f6f4c9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"3a50d1a3_f713f70b","line":47,"in_reply_to":"9a41bdd9_9dd049cb","updated":"2015-07-19 19:03:45.000000000","message":"yes, I\u0027m working on this","commit_id":"2b5e92602017226db93b1c801c1ffc8e313e1f07"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"449fc1db4cff69f6f2049b62313a2a398bbc3711","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    projects \u003d list(project_table.select().execute())"},{"line_number":79,"context_line":"    for project in projects:"},{"line_number":80,"context_line":"        if (project.parent_id is None and not project.is_domain):"},{"line_number":81,"context_line":"            # Update the project parent_id to be its domain_id"},{"line_number":82,"context_line":"            values \u003d {\u0027parent_id\u0027: project.domain_id}"},{"line_number":83,"context_line":"            update \u003d project_table.update().where("}],"source_content_type":"text/x-python","patch_set":61,"id":"9a41bdd9_d84c9f78","line":80,"updated":"2015-07-19 09:57:46.000000000","message":"I assume, therefore that once we have gone through all the projects, we\u0027ll be left with all the is_domain projects with the parent_id still set to None?  I think that\u0027s the right answer....but how does that square with the constraints on that attribute.  Is this a nullable FK?","commit_id":"2b5e92602017226db93b1c801c1ffc8e313e1f07"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"bd9a23e937beaeb008559436d88a8607f9f6f4c9","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    projects \u003d list(project_table.select().execute())"},{"line_number":79,"context_line":"    for project in projects:"},{"line_number":80,"context_line":"        if (project.parent_id is None and not project.is_domain):"},{"line_number":81,"context_line":"            # Update the project parent_id to be its domain_id"},{"line_number":82,"context_line":"            values \u003d {\u0027parent_id\u0027: project.domain_id}"},{"line_number":83,"context_line":"            update \u003d project_table.update().where("}],"source_content_type":"text/x-python","patch_set":61,"id":"3a50d1a3_37315fa3","line":80,"in_reply_to":"9a41bdd9_d84c9f78","updated":"2015-07-19 19:03:45.000000000","message":"Actually, the parent_id was never a problem. It we are pointing to a column that is not nullable. What might come to be a problem is the fact that domain_id is now nullable, once the root is_domain projects will have no domain_id. Do you have any suggestions to work on that?","commit_id":"2b5e92602017226db93b1c801c1ffc8e313e1f07"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"22539be7d55567e2bdb581aad6c129ab233366f5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_f16d2333","line":47,"updated":"2015-07-20 21:26:06.000000000","message":"still think this should be None, here....","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"855487f2d86ff59c0444b1904bbfddb8cc0e976a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_3a51110f","line":47,"in_reply_to":"3a50d1a3_14274cb7","updated":"2015-07-21 02:57:09.000000000","message":"my bad. I must\u0027ve confused the patches. Done","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"cb7adc39c83aad82f7468fe68ed4e21170094735","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            \u0027name\u0027: domain.name,"},{"line_number":45,"context_line":"            \u0027enabled\u0027: domain.enabled,"},{"line_number":46,"context_line":"            \u0027description\u0027: description,"},{"line_number":47,"context_line":"            \u0027domain_id\u0027: domain.id,"},{"line_number":48,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":49,"context_line":"            \u0027parent_id\u0027: None,"},{"line_number":50,"context_line":"            \u0027extra\u0027: \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_14274cb7","line":47,"in_reply_to":"3a50d1a3_f16d2333","updated":"2015-07-20 21:28:31.000000000","message":"...in a previous comment you had stated that this was fixed in the path on which this is dependant...but I don\u0027t quite see how that could be done...I\u0027m probably missing the obvious....","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"22539be7d55567e2bdb581aad6c129ab233366f5","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # NOTE(htruta): Remove the parent_id constraint during the migration"},{"line_number":63,"context_line":"    # because for every root project inside this domain, we will set"},{"line_number":64,"context_line":"    # the domain_id to be the parent_id. We re-enable the constraint"},{"line_number":65,"context_line":"    # in the end of this method."},{"line_number":66,"context_line":"    if migrate_engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":67,"context_line":"        migration_helpers.remove_constraints("}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_511177ab","line":64,"updated":"2015-07-20 21:26:06.000000000","message":"should be set to None, now...","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"855487f2d86ff59c0444b1904bbfddb8cc0e976a","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # NOTE(htruta): Remove the parent_id constraint during the migration"},{"line_number":63,"context_line":"    # because for every root project inside this domain, we will set"},{"line_number":64,"context_line":"    # the domain_id to be the parent_id. We re-enable the constraint"},{"line_number":65,"context_line":"    # in the end of this method."},{"line_number":66,"context_line":"    if migrate_engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":67,"context_line":"        migration_helpers.remove_constraints("}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_fa5ac929","line":64,"in_reply_to":"3a50d1a3_511177ab","updated":"2015-07-21 02:57:09.000000000","message":"actually, no... these root projects will be under the is_domain\u003dTrue projects and will have domain_id as their domain_id  and parent_id","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"}],"keystone/resource/backends/ldap.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"361764caf0446fbece53f449d3a4f1eba1600b4b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        if hints is not None:"},{"line_number":112,"context_line":"            for f in hints.filters:"},{"line_number":113,"context_line":"                if f[\u0027name\u0027] \u003d\u003d \u0027is_domain\u0027 and f[\u0027value\u0027]:"},{"line_number":114,"context_line":"                    return [resource.calc_default_domain()]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            if (controller.V3Controller.filter_by_attributes("},{"line_number":117,"context_line":"               [is_domain_project], hints)):"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_89ea3aab","line":114,"updated":"2015-07-27 13:19:50.000000000","message":"shouldn\u0027t set the default attributes in the ref?","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97d78c5337ab10f90640e53c6499eca780c2a90a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        if hints is not None:"},{"line_number":112,"context_line":"            for f in hints.filters:"},{"line_number":113,"context_line":"                if f[\u0027name\u0027] \u003d\u003d \u0027is_domain\u0027 and f[\u0027value\u0027]:"},{"line_number":114,"context_line":"                    return [resource.calc_default_domain()]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            if (controller.V3Controller.filter_by_attributes("},{"line_number":117,"context_line":"               [is_domain_project], hints)):"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_855f4440","line":114,"in_reply_to":"3a50d1a3_89ea3aab","updated":"2015-07-28 13:22:35.000000000","message":"Done","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"361764caf0446fbece53f449d3a4f1eba1600b4b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        return projects"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":128,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":129,"context_line":"        # any domain specified"},{"line_number":130,"context_line":"        projects \u003d self.list_projects(driver_hints.Hints())"},{"line_number":131,"context_line":"        # TODO(samueldmq): Change this by supporting notEquals filter in"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_8938fa3e","line":128,"updated":"2015-07-27 13:19:50.000000000","message":"you are not ignoring the domain_id anymore","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97d78c5337ab10f90640e53c6499eca780c2a90a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        return projects"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def list_projects_in_domain(self, domain_id):"},{"line_number":128,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":129,"context_line":"        # any domain specified"},{"line_number":130,"context_line":"        projects \u003d self.list_projects(driver_hints.Hints())"},{"line_number":131,"context_line":"        # TODO(samueldmq): Change this by supporting notEquals filter in"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_2550b031","line":128,"in_reply_to":"3a50d1a3_8938fa3e","updated":"2015-07-28 13:22:35.000000000","message":"Done","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"361764caf0446fbece53f449d3a4f1eba1600b4b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":129,"context_line":"        # any domain specified"},{"line_number":130,"context_line":"        projects \u003d self.list_projects(driver_hints.Hints())"},{"line_number":131,"context_line":"        # TODO(samueldmq): Change this by supporting notEquals filter in"},{"line_number":132,"context_line":"        # driver hints and then create driver hints at manager level"},{"line_number":133,"context_line":"        return [project for project in projects if project[\u0027id\u0027] !\u003d domain_id]"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_2940c6a4","line":131,"updated":"2015-07-27 13:19:50.000000000","message":"isn\u0027t htruta?","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97d78c5337ab10f90640e53c6499eca780c2a90a","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # We don\u0027t support multiple domains within this driver, so ignore"},{"line_number":129,"context_line":"        # any domain specified"},{"line_number":130,"context_line":"        projects \u003d self.list_projects(driver_hints.Hints())"},{"line_number":131,"context_line":"        # TODO(samueldmq): Change this by supporting notEquals filter in"},{"line_number":132,"context_line":"        # driver hints and then create driver hints at manager level"},{"line_number":133,"context_line":"        return [project for project in projects if project[\u0027id\u0027] !\u003d domain_id]"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_8578a4c5","line":131,"in_reply_to":"3a50d1a3_2940c6a4","updated":"2015-07-28 13:22:35.000000000","message":"nope, it is correct","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"361764caf0446fbece53f449d3a4f1eba1600b4b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def list_projects_from_ids(self, ids, is_domain\u003dFalse):"},{"line_number":151,"context_line":"        # If querying for is_domain projects, return the default domain"},{"line_number":152,"context_line":"        if is_domain:"},{"line_number":153,"context_line":"            return [resource.calc_default_domain()]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        return [self.get_project(id) for id in ids]"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_c915a29b","line":153,"updated":"2015-07-27 13:19:50.000000000","message":"set default attributes?","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97d78c5337ab10f90640e53c6499eca780c2a90a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def list_projects_from_ids(self, ids, is_domain\u003dFalse):"},{"line_number":151,"context_line":"        # If querying for is_domain projects, return the default domain"},{"line_number":152,"context_line":"        if is_domain:"},{"line_number":153,"context_line":"            return [resource.calc_default_domain()]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        return [self.get_project(id) for id in ids]"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_e56e48ff","line":153,"in_reply_to":"3a50d1a3_c915a29b","updated":"2015-07-28 13:22:35.000000000","message":"that\u0027s true","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"361764caf0446fbece53f449d3a4f1eba1600b4b","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":175,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":176,"context_line":"            self.create_domain(tenant_id, tenant)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.project.check_allow_create()"},{"line_number":179,"context_line":"        self._validate_parent_project(tenant)"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_e9209ef9","line":176,"updated":"2015-07-27 13:19:50.000000000","message":"shouldn\u0027t return here?","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97d78c5337ab10f90640e53c6499eca780c2a90a","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":175,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":176,"context_line":"            self.create_domain(tenant_id, tenant)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.project.check_allow_create()"},{"line_number":179,"context_line":"        self._validate_parent_project(tenant)"}],"source_content_type":"text/x-python","patch_set":66,"id":"3a50d1a3_256990f9","line":176,"in_reply_to":"3a50d1a3_e9209ef9","updated":"2015-07-28 13:22:35.000000000","message":"I dont think so... it\u0027ll raise an error","commit_id":"193fb399c13d7d3e069c95936c77658b013e005d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d0627c6f9e373ccae80c5fe98f54ca7fcc00dd20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":69,"id":"3a50d1a3_264673c0","updated":"2015-07-28 15:04:02.000000000","message":"need to address the comments from patchset 66","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d0627c6f9e373ccae80c5fe98f54ca7fcc00dd20","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        # driver hints and then create driver hints at manager level"},{"line_number":133,"context_line":"        return [project for project in projects if project[\u0027id\u0027] !\u003d domain_id]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def list_projects_in_subtree(self, project_id):"},{"line_number":136,"context_line":"        # We don\u0027t support projects hierarchy within this driver, so a"},{"line_number":137,"context_line":"        # project will never have children"},{"line_number":138,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_c6e9cf80","line":135,"updated":"2015-07-28 15:04:02.000000000","message":"this will change since we are creating a one level hierarchy within this driver (will return all projects, except the domain if project_id \u003d default_domain_id. Will return an empty list otherwise)","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d0627c6f9e373ccae80c5fe98f54ca7fcc00dd20","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        # project will never have children"},{"line_number":138,"context_line":"        return []"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def list_project_parents(self, project_id):"},{"line_number":141,"context_line":"        # We don\u0027t support projects hierarchy within this driver, so a"},{"line_number":142,"context_line":"        # project will never have parents"},{"line_number":143,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_668a3bc1","line":140,"updated":"2015-07-28 15:04:02.000000000","message":"similar as above, but will return the default_domain if the project_id !\u003d default_domain_id","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d0627c6f9e373ccae80c5fe98f54ca7fcc00dd20","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def is_leaf_project(self, project_id):"},{"line_number":146,"context_line":"        # We don\u0027t support projects hierarchy within this driver, so a"},{"line_number":147,"context_line":"        # project will always be a root and a leaf at the same time"},{"line_number":148,"context_line":"        return True"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def list_projects_from_ids(self, ids, is_domain\u003dFalse):"},{"line_number":151,"context_line":"        # If querying for is_domain projects, return the default domain"}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_a6b28394","line":148,"updated":"2015-07-28 15:04:02.000000000","message":"only the default_domain will return False","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"}],"keystone/resource/backends/sql.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4794befccfcb00fab9112fb1a3f26007d05fb443","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            query \u003d query.filter_by(name\u003dtenant_name, is_domain\u003dis_domain)"},{"line_number":47,"context_line":"            if domain_id:"},{"line_number":48,"context_line":"                query \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":49,"context_line":"            try:"},{"line_number":50,"context_line":"                project_ref \u003d query.one()"},{"line_number":51,"context_line":"            except sql.NotFound:"},{"line_number":52,"context_line":"                raise exception.ProjectNotFound(project_id\u003dtenant_name)"}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_0495a83e","line":49,"updated":"2015-08-01 08:47:41.000000000","message":"It might be worth adding a NOTE here just to explain that even if domain_id is not specified, the name for a project acting as a domain must be unique...hence only one item can be returned.","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"50b39c77411c0007db57fe2096a4ac4ba1b9d88c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            query \u003d query.filter_by(name\u003dtenant_name, is_domain\u003dis_domain)"},{"line_number":47,"context_line":"            if domain_id:"},{"line_number":48,"context_line":"                query \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":49,"context_line":"            try:"},{"line_number":50,"context_line":"                project_ref \u003d query.one()"},{"line_number":51,"context_line":"            except sql.NotFound:"},{"line_number":52,"context_line":"                raise exception.ProjectNotFound(project_id\u003dtenant_name)"}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_47708fa4","line":49,"in_reply_to":"3a50d1a3_0495a83e","updated":"2015-08-01 17:12:25.000000000","message":"Done","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"7a0fa78429de07c695014b7c8102414a2c3296c5","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"                examined.update(children_ids)"},{"line_number":124,"context_line":"                subtree +\u003d children"},{"line_number":125,"context_line":"                children \u003d self._get_children(session, children_ids, False)"},{"line_number":126,"context_line":"            return subtree"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def list_project_parents(self, project_id):"}],"source_content_type":"text/x-python","patch_set":76,"id":"1a4dcd0f_ce0ab8d2","line":125,"updated":"2015-08-04 13:13:45.000000000","message":"instead of passing the is_domain flag, pass the domain_id","commit_id":"b0d4719945d8eaecae45e9a3a5072520593b137c"}],"keystone/resource/controllers.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"22539be7d55567e2bdb581aad6c129ab233366f5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def list_projects(self, context, filters):"},{"line_number":250,"context_line":"        hints \u003d ProjectV3.build_driver_hints(context, filters)"},{"line_number":251,"context_line":"        if not context[\u0027query_string\u0027].get(\u0027is_domain\u0027):"},{"line_number":252,"context_line":"            hints.add_filter(\u0027is_domain\u0027, False)"},{"line_number":253,"context_line":"        refs \u003d self.resource_api.list_projects(hints\u003dhints)"},{"line_number":254,"context_line":"        return ProjectV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_b158fb57","line":252,"updated":"2015-07-20 21:26:06.000000000","message":"is the idea that we lift this restriction once at the end of the set of patches....or does this stay this way?","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"855487f2d86ff59c0444b1904bbfddb8cc0e976a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def list_projects(self, context, filters):"},{"line_number":250,"context_line":"        hints \u003d ProjectV3.build_driver_hints(context, filters)"},{"line_number":251,"context_line":"        if not context[\u0027query_string\u0027].get(\u0027is_domain\u0027):"},{"line_number":252,"context_line":"            hints.add_filter(\u0027is_domain\u0027, False)"},{"line_number":253,"context_line":"        refs \u003d self.resource_api.list_projects(hints\u003dhints)"},{"line_number":254,"context_line":"        return ProjectV3.wrap_collection(context, refs, hints\u003dhints)"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_9eba9209","line":252,"in_reply_to":"3a50d1a3_b158fb57","updated":"2015-07-21 02:57:09.000000000","message":"I\u0027ll check on this one","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"}],"keystone/resource/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d7737883e37ae5899f814138e35f0ed4fcd4efe8","unresolved":false,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def delete_domain(self, domain_id, initiator\u003dNone):"},{"line_number":662,"context_line":"        # # Reflect the domain delete on the correspondent is_domain project"},{"line_number":663,"context_line":"        # self._delete_project(domain_id, initiator)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        self._delete_domain(domain_id, initiator)"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_d670ecde","line":663,"updated":"2015-04-14 00:00:40.000000000","message":"is this meant to be here?","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7cbdd66f808eb37441c1826574c2f5ae47474c22","unresolved":false,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def delete_domain(self, domain_id, initiator\u003dNone):"},{"line_number":662,"context_line":"        # # Reflect the domain delete on the correspondent is_domain project"},{"line_number":663,"context_line":"        # self._delete_project(domain_id, initiator)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        self._delete_domain(domain_id, initiator)"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_bc42e13c","line":663,"in_reply_to":"7aaa499b_d670ecde","updated":"2015-04-14 00:48:46.000000000","message":"I\u0027ll fix this.","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"22539be7d55567e2bdb581aad6c129ab233366f5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    return {\u0027description\u0027:"},{"line_number":48,"context_line":"            (u\u0027Owns users and tenants (i.e. projects)\u0027"},{"line_number":49,"context_line":"                \u0027 available on Identity API v2.\u0027),"},{"line_number":50,"context_line":"            \u0027domain_id\u0027: CONF.identity.default_domain_id,"},{"line_number":51,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":52,"context_line":"            \u0027id\u0027: CONF.identity.default_domain_id,"},{"line_number":53,"context_line":"            \u0027is_domain\u0027: True,"}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_1123efbe","line":50,"updated":"2015-07-20 21:26:06.000000000","message":"should be None...","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"855487f2d86ff59c0444b1904bbfddb8cc0e976a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    return {\u0027description\u0027:"},{"line_number":48,"context_line":"            (u\u0027Owns users and tenants (i.e. projects)\u0027"},{"line_number":49,"context_line":"                \u0027 available on Identity API v2.\u0027),"},{"line_number":50,"context_line":"            \u0027domain_id\u0027: CONF.identity.default_domain_id,"},{"line_number":51,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":52,"context_line":"            \u0027id\u0027: CONF.identity.default_domain_id,"},{"line_number":53,"context_line":"            \u0027is_domain\u0027: True,"}],"source_content_type":"text/x-python","patch_set":62,"id":"3a50d1a3_9bbaa409","line":50,"in_reply_to":"3a50d1a3_1123efbe","updated":"2015-07-21 02:57:09.000000000","message":"Done","commit_id":"84d6cb999ebc30c4d21f91d58cac826643d9d256"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"37434a1bd1313e9ede7238532899ca1bf07eaafb","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        # If it doesn\u0027t, it means that there already is an is_domain project"},{"line_number":100,"context_line":"        # with the given name"},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            self.get_project_by_name(name, None, True)"},{"line_number":103,"context_line":"            raise exception.Conflict(_(\u0027Cannot create two domains with the \u0027"},{"line_number":104,"context_line":"                                       \u0027same name %s\u0027) % name)"},{"line_number":105,"context_line":"        except exception.ProjectNotFound:"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_4e5faa75","line":102,"updated":"2015-07-24 09:57:57.000000000","message":"It might be better to indicate what the None parameter is doing here and whether it is relevant, e.g.:\n\n# parent_id is not relevant in each of clashing is_domain projects\nparent_id \u003d None\nself.get_project_by_name(name, None, True)","commit_id":"9c27054625638f373dadc931331f56d5998d8521"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97c54e178522cb96411c607923620366812a5ca0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        # If it doesn\u0027t, it means that there already is an is_domain project"},{"line_number":100,"context_line":"        # with the given name"},{"line_number":101,"context_line":"        try:"},{"line_number":102,"context_line":"            self.get_project_by_name(name, None, True)"},{"line_number":103,"context_line":"            raise exception.Conflict(_(\u0027Cannot create two domains with the \u0027"},{"line_number":104,"context_line":"                                       \u0027same name %s\u0027) % name)"},{"line_number":105,"context_line":"        except exception.ProjectNotFound:"}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_cdf2c06f","line":102,"in_reply_to":"3a50d1a3_4e5faa75","updated":"2015-07-24 22:26:45.000000000","message":"Done","commit_id":"9c27054625638f373dadc931331f56d5998d8521"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"37434a1bd1313e9ede7238532899ca1bf07eaafb","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def create_project(self, tenant_id, tenant, initiator\u003dNone):"},{"line_number":246,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":247,"context_line":"            domain \u003d self._get_domain_from_project(tenant)"},{"line_number":248,"context_line":"            self._create_domain(tenant_id, domain, initiator)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return self._create_project(tenant_id, tenant, initiator)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_a9b50832","line":248,"updated":"2015-07-24 09:57:57.000000000","message":"Given that with this patch domain methods always read from the project table, I\u0027m not quite sure why we both keeping the domain table up to date? I\u0027m also concerned that we might create a domain entry, but then fail the project create (since the checks are different)...","commit_id":"9c27054625638f373dadc931331f56d5998d8521"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"97c54e178522cb96411c607923620366812a5ca0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def create_project(self, tenant_id, tenant, initiator\u003dNone):"},{"line_number":246,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":247,"context_line":"            domain \u003d self._get_domain_from_project(tenant)"},{"line_number":248,"context_line":"            self._create_domain(tenant_id, domain, initiator)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return self._create_project(tenant_id, tenant, initiator)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"3a50d1a3_5eb3b40a","line":248,"in_reply_to":"3a50d1a3_a9b50832","updated":"2015-07-24 22:26:45.000000000","message":"We tried to make each patch as granular as possible. The removal of domain references is made in the next patch. I\u0027ll try to say that in the commit message.","commit_id":"9c27054625638f373dadc931331f56d5998d8521"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"71f4b3b13bcdf27dff671bf7dbb113f0f4ddd37a","unresolved":false,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return domain_ref"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _create_domain(self, domain_id, domain, initiator):"},{"line_number":661,"context_line":"        if (not self.identity_api.multiple_domains_supported and"},{"line_number":662,"context_line":"                domain_id !\u003d CONF.identity.default_domain_id):"},{"line_number":663,"context_line":"            raise exception.ValidationError("}],"source_content_type":"text/x-python","patch_set":68,"id":"3a50d1a3_74419362","line":660,"updated":"2015-07-28 10:43:40.000000000","message":"If we are going to keep domain around with this patch (and I still question whether that is the right thing), then you can\u0027t have any checks in _create_domain....this should be called AFTER you have create the project and have no checks...it just creates the domain entry (no questions asked).","commit_id":"d5c91854f6140049b40f09f599d625cec8cd731b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1ede6939ab34951074849c09148499320ef040df","unresolved":false,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return domain_ref"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _create_domain(self, domain_id, domain, initiator):"},{"line_number":661,"context_line":"        if (not self.identity_api.multiple_domains_supported and"},{"line_number":662,"context_line":"                domain_id !\u003d CONF.identity.default_domain_id):"},{"line_number":663,"context_line":"            raise exception.ValidationError("}],"source_content_type":"text/x-python","patch_set":68,"id":"3a50d1a3_6d38ded3","line":660,"in_reply_to":"3a50d1a3_74419362","updated":"2015-07-28 14:01:35.000000000","message":"the reason why we keep this here is because in the follow up patch, we \"split\" the behavior: the _create_project() method won\u0027t call _create_domain() anymore. We also extract the checks from the _create_domain() to an external method so it can be used by both APIs.\n\nWe finally remove the _create_domain() once we drop the domain table.\n\nWe also replicate the entities for preventive reasons, replicate them we avoid to leave bugs in cases that we haven\u0027t considered.","commit_id":"d5c91854f6140049b40f09f599d625cec8cd731b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"71f4b3b13bcdf27dff671bf7dbb113f0f4ddd37a","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        \"\"\""},{"line_number":710,"context_line":"        pass"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    def _update_domain(self, domain_id, domain, initiator):"},{"line_number":713,"context_line":"        self.assert_domain_not_federated(domain_id, domain)"},{"line_number":714,"context_line":"        original_domain \u003d self.get_domain(domain_id)"},{"line_number":715,"context_line":"        if \u0027enabled\u0027 in domain:"}],"source_content_type":"text/x-python","patch_set":68,"id":"3a50d1a3_b4195b8a","line":712,"updated":"2015-07-28 10:43:40.000000000","message":"same here","commit_id":"d5c91854f6140049b40f09f599d625cec8cd731b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1ede6939ab34951074849c09148499320ef040df","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        \"\"\""},{"line_number":710,"context_line":"        pass"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    def _update_domain(self, domain_id, domain, initiator):"},{"line_number":713,"context_line":"        self.assert_domain_not_federated(domain_id, domain)"},{"line_number":714,"context_line":"        original_domain \u003d self.get_domain(domain_id)"},{"line_number":715,"context_line":"        if \u0027enabled\u0027 in domain:"}],"source_content_type":"text/x-python","patch_set":68,"id":"3a50d1a3_cd4d7273","line":712,"in_reply_to":"3a50d1a3_b4195b8a","updated":"2015-07-28 14:01:35.000000000","message":"see the reply above","commit_id":"d5c91854f6140049b40f09f599d625cec8cd731b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d0627c6f9e373ccae80c5fe98f54ca7fcc00dd20","unresolved":false,"context_lines":[{"line_number":46,"context_line":"def calc_default_domain_project():"},{"line_number":47,"context_line":"    return {\u0027description\u0027:"},{"line_number":48,"context_line":"            (u\u0027Owns users and tenants (i.e. projects)\u0027"},{"line_number":49,"context_line":"                \u0027 available on Identity API v2.\u0027),"},{"line_number":50,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":51,"context_line":"            \u0027id\u0027: CONF.identity.default_domain_id,"},{"line_number":52,"context_line":"            \u0027name\u0027: u\u0027Default\u0027,"}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_26ef53b2","line":49,"updated":"2015-07-28 15:04:02.000000000","message":"shouldn\u0027t be v3?","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f6a048ccea97e373eb59ec22e147d4032fb926f3","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def create_project(self, tenant_id, tenant, initiator\u003dNone):"},{"line_number":249,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":250,"context_line":"            domain \u003d self._get_domain_from_project(tenant)"},{"line_number":251,"context_line":"            self._create_domain(tenant_id, domain, initiator)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return self._create_project(tenant_id, tenant, initiator)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_d51ee90c","line":251,"updated":"2015-07-30 11:09:36.000000000","message":"So I really, really, really don\u0027t like this.  I can\u0027t see any reason why we are maintaining domains in the patch.  Why not just leave them orphaned until you clean them up in the next patch?","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f6a048ccea97e373eb59ec22e147d4032fb926f3","unresolved":false,"context_lines":[{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        return domain_ref"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def _create_domain(self, domain_id, domain, initiator):"},{"line_number":662,"context_line":"        if (not self.identity_api.multiple_domains_supported and"},{"line_number":663,"context_line":"                domain_id !\u003d CONF.identity.default_domain_id):"},{"line_number":664,"context_line":"            raise exception.ValidationError("}],"source_content_type":"text/x-python","patch_set":69,"id":"3a50d1a3_35b70df7","line":661,"updated":"2015-07-30 11:09:36.000000000","message":"We absolutely, positively can\u0027t have checks in here.  We either use all the checks in _create_project or all checks in _create_domain, but not both.","commit_id":"018b96fdbce5e1e6af8b300649bc7e4446c8a07d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4794befccfcb00fab9112fb1a3f26007d05fb443","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    def create_project(self, tenant_id, tenant, initiator\u003dNone):"},{"line_number":240,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":241,"context_line":"            domain \u003d self._get_domain_from_project(tenant)"},{"line_number":242,"context_line":"            self._create_domain(tenant_id, domain, initiator)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return self._create_project(tenant_id, tenant, initiator)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_6484ac0a","line":242,"updated":"2015-08-01 08:47:41.000000000","message":"nope can\u0027t do that (yet)...we haven\u0027t checked the project constraints...so we could fail in odd ways (e.g. clashing names etc.)\n\n(Henry acting like a dog with a bone)...why oh why are we bothering to maintain both tables in this patch...we never read the domain table, so what\u0027s the point?","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"50b39c77411c0007db57fe2096a4ac4ba1b9d88c","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    def create_project(self, tenant_id, tenant, initiator\u003dNone):"},{"line_number":240,"context_line":"        if tenant.get(\u0027is_domain\u0027):"},{"line_number":241,"context_line":"            domain \u003d self._get_domain_from_project(tenant)"},{"line_number":242,"context_line":"            self._create_domain(tenant_id, domain, initiator)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return self._create_project(tenant_id, tenant, initiator)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_27af837e","line":242,"in_reply_to":"3a50d1a3_6484ac0a","updated":"2015-08-01 17:12:25.000000000","message":"We are maintaning both because there is a lot of references to the domain \u0027construct\u0027 that must be removed as well. That would basically lead us to squash this patch with the next one that really removes these references. And I also think that this patch is already big enough :/","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4794befccfcb00fab9112fb1a3f26007d05fb443","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        hints.add_filter(name\u003d\u0027is_domain\u0027, value\u003dTrue)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        # Retrieve the is_domain projects and get their correspondent domains"},{"line_number":670,"context_line":"        projects \u003d self.driver.list_projects(hints)"},{"line_number":671,"context_line":"        domains \u003d [self._get_domain_from_project(project)"},{"line_number":672,"context_line":"                   for project in projects]"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_44b3b00a","line":670,"updated":"2015-08-01 08:47:41.000000000","message":"We should create a specific backend driver method \"list_projects_acting_as_domain()\" instead of using hints","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"50b39c77411c0007db57fe2096a4ac4ba1b9d88c","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        hints.add_filter(name\u003d\u0027is_domain\u0027, value\u003dTrue)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        # Retrieve the is_domain projects and get their correspondent domains"},{"line_number":670,"context_line":"        projects \u003d self.driver.list_projects(hints)"},{"line_number":671,"context_line":"        domains \u003d [self._get_domain_from_project(project)"},{"line_number":672,"context_line":"                   for project in projects]"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_07aa87d2","line":670,"in_reply_to":"3a50d1a3_44b3b00a","updated":"2015-08-01 17:12:25.000000000","message":"Done","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4794befccfcb00fab9112fb1a3f26007d05fb443","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":783,"context_line":"        hints.add_filter(\u0027domain_id\u0027, domain_id)"},{"line_number":784,"context_line":"        proj_refs \u003d self.list_projects(hints)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        # Deleting projects recursively"},{"line_number":787,"context_line":"        roots \u003d [x for x in proj_refs if x.get(\u0027parent_id\u0027) \u003d\u003d domain_id]"}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_c49ee062","line":784,"updated":"2015-08-01 08:47:41.000000000","message":"don\u0027t use hints...we already have a backend method list_projects_in_domain()","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"50b39c77411c0007db57fe2096a4ac4ba1b9d88c","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":783,"context_line":"        hints.add_filter(\u0027domain_id\u0027, domain_id)"},{"line_number":784,"context_line":"        proj_refs \u003d self.list_projects(hints)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        # Deleting projects recursively"},{"line_number":787,"context_line":"        roots \u003d [x for x in proj_refs if x.get(\u0027parent_id\u0027) \u003d\u003d domain_id]"}],"source_content_type":"text/x-python","patch_set":71,"id":"3a50d1a3_a7b8732b","line":784,"in_reply_to":"3a50d1a3_c49ee062","updated":"2015-08-01 17:12:25.000000000","message":"Done","commit_id":"53de1fdd2daea10e97aa36a15ba68aa5bad4b883"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6198ae932dc42a0b8462ccf56689395273b4caa3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                if parent_ref[\u0027id\u0027] !\u003d domain[\u0027id\u0027]:"},{"line_number":185,"context_line":"                    raise exception.ValidationError("},{"line_number":186,"context_line":"                        message\u003d_(\u0027cannot create a regular project \u0027"},{"line_number":187,"context_line":"                                  \u0027within domain \"%(domain_id)s\". Since its \u0027"},{"line_number":188,"context_line":"                                  \u0027parent is acting as a domain, the \u0027"},{"line_number":189,"context_line":"                                  \u0027domain_id must match its parent_id \u0027"},{"line_number":190,"context_line":"                                  \u0027(%(parent_id)s).\u0027)"}],"source_content_type":"text/x-python","patch_set":85,"id":"da20952f_06529fdd","line":187,"updated":"2015-08-28 09:10:12.000000000","message":"This message is confusing - the first sentence sounds like you can never create a regular project in the domain. Try and use more of the form of the message in the if clause above, e.g. perhaps something like:\n\n\u0027Cannot create project, since it\u0027s parent (%(domain_id)s) is acting as a domain, but the project\u0027s specified parent_id (%(parent_ref[\u0027id\u0027])s) does not match this domain_id.\u0027","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                if parent_ref[\u0027id\u0027] !\u003d domain[\u0027id\u0027]:"},{"line_number":185,"context_line":"                    raise exception.ValidationError("},{"line_number":186,"context_line":"                        message\u003d_(\u0027cannot create a regular project \u0027"},{"line_number":187,"context_line":"                                  \u0027within domain \"%(domain_id)s\". Since its \u0027"},{"line_number":188,"context_line":"                                  \u0027parent is acting as a domain, the \u0027"},{"line_number":189,"context_line":"                                  \u0027domain_id must match its parent_id \u0027"},{"line_number":190,"context_line":"                                  \u0027(%(parent_id)s).\u0027)"}],"source_content_type":"text/x-python","patch_set":85,"id":"da20952f_1c964c93","line":187,"in_reply_to":"da20952f_06529fdd","updated":"2015-08-28 22:41:03.000000000","message":"Done","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79d1ba20a59c3e54008a880a0bbaae5455760f47","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    @MEMOIZE"},{"line_number":834,"context_line":"    def get_project_by_name(self, tenant_name, domain_id, is_domain):"},{"line_number":835,"context_line":"        # NOTE(rodrigods): Avoid backend lookup if it is an impossible case"},{"line_number":836,"context_line":"        if not is_domain and domain_id is None:"},{"line_number":837,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_name)"},{"line_number":838,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_59efff86","line":835,"updated":"2015-08-25 15:14:50.000000000","message":"why?","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    @MEMOIZE"},{"line_number":834,"context_line":"    def get_project_by_name(self, tenant_name, domain_id, is_domain):"},{"line_number":835,"context_line":"        # NOTE(rodrigods): Avoid backend lookup if it is an impossible case"},{"line_number":836,"context_line":"        if not is_domain and domain_id is None:"},{"line_number":837,"context_line":"            raise exception.ProjectNotFound(project_id\u003dtenant_name)"},{"line_number":838,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"da20952f_dcb9b416","line":835,"in_reply_to":"fa1b9901_59efff86","updated":"2015-08-28 22:41:03.000000000","message":"we\u0027ll never store a project like this one (is_domain\u003dFalse and domain_id\u003dNone), since the only projects that can have is_domain\u003dNone are the is_domain\u003dTrue projects that are root","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"}],"keystone/resource/schema.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79d1ba20a59c3e54008a880a0bbaae5455760f47","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"_project_properties \u003d {"},{"line_number":18,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":19,"context_line":"    # NOTE(htruta): domain_id must be passed as null or equals to the"},{"line_number":20,"context_line":"    # parent_id in the controller layer if it is a project acting as a domain."},{"line_number":21,"context_line":"    \u0027domain_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":22,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_594b7f87","line":19,"updated":"2015-08-25 15:14:50.000000000","message":"equals? why not \n\n    as null or equal to the parent_id","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"_project_properties \u003d {"},{"line_number":18,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":19,"context_line":"    # NOTE(htruta): domain_id must be passed as null or equals to the"},{"line_number":20,"context_line":"    # parent_id in the controller layer if it is a project acting as a domain."},{"line_number":21,"context_line":"    \u0027domain_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":22,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_e0137963","line":19,"in_reply_to":"fa1b9901_594b7f87","updated":"2015-08-28 22:41:03.000000000","message":"Done","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"}],"keystone/tests/test_keystoneclient.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"3ae612192f4ab870d33649d31285e1f1405e44bf","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"},{"line_number":409,"context_line":"        tenants \u003d client.tenants.list()"},{"line_number":410,"context_line":"        # +1 because domain has root project. "},{"line_number":411,"context_line":"        self.assertEqual(len(default_fixtures.TENANTS)  + 1, len(tenants))"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def test_invalid_password(self):"},{"line_number":414,"context_line":"        from keystoneclient import exceptions as client_exceptions"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_e04611bf","line":411,"updated":"2014-12-24 16:45:30.000000000","message":"but we can\u0027t use magic numbers, right? :)","commit_id":"e99416066921067a3b817a2db3191644bb9759b2"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"3ae612192f4ab870d33649d31285e1f1405e44bf","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"                              self.proj_customers[\u0027id\u0027],"},{"line_number":1088,"context_line":"                              self.project_inherited[\u0027id\u0027],"},{"line_number":1089,"context_line":"                              self.project_inherited[\u0027domain_id\u0027]],))"},{"line_number":1090,"context_line":"        #import rpdb; rpdb.set_trace()"},{"line_number":1091,"context_line":"        for token, projects_ref in zip(token, projects_refs):"},{"line_number":1092,"context_line":"            for url in urls:"},{"line_number":1093,"context_line":"                r \u003d self.get(url, token\u003dtoken)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_608141c2","line":1090,"updated":"2014-12-24 16:45:30.000000000","message":"remove this line","commit_id":"e99416066921067a3b817a2db3191644bb9759b2"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79d1ba20a59c3e54008a880a0bbaae5455760f47","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                          tenant)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def test_create_duplicate_project_name_fails(self):"},{"line_number":456,"context_line":"        tenant \u003d {\u0027id\u0027: \u0027fake1\u0027, \u0027name\u0027: \u0027fake\u0027,"},{"line_number":457,"context_line":"                  \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":458,"context_line":"        self.resource_api.create_project(\u0027fake1\u0027, tenant)"},{"line_number":459,"context_line":"        tenant[\u0027id\u0027] \u003d \u0027fake2\u0027"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_791e8371","line":456,"updated":"2015-08-25 15:14:50.000000000","message":"nit: use a uuid and save it to a variable that is reused in other places.","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                          tenant)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def test_create_duplicate_project_name_fails(self):"},{"line_number":456,"context_line":"        tenant \u003d {\u0027id\u0027: \u0027fake1\u0027, \u0027name\u0027: \u0027fake\u0027,"},{"line_number":457,"context_line":"                  \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":458,"context_line":"        self.resource_api.create_project(\u0027fake1\u0027, tenant)"},{"line_number":459,"context_line":"        tenant[\u0027id\u0027] \u003d \u0027fake2\u0027"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_124e043b","line":456,"in_reply_to":"fa1b9901_791e8371","updated":"2015-08-28 22:41:03.000000000","message":"Done","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79d1ba20a59c3e54008a880a0bbaae5455760f47","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                          tenant)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def test_create_duplicate_is_domain_project_name_fails(self):"},{"line_number":466,"context_line":"        tenant \u003d {\u0027id\u0027: \u0027fake1\u0027, \u0027name\u0027: \u0027fake\u0027,"},{"line_number":467,"context_line":"                  \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"},{"line_number":468,"context_line":"                  \u0027is_domain\u0027: True}"},{"line_number":469,"context_line":"        self.resource_api.create_project(\u0027fake1\u0027, tenant)"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_d90d4f3f","line":466,"updated":"2015-08-25 15:14:50.000000000","message":"same comment here","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                          tenant)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def test_create_duplicate_is_domain_project_name_fails(self):"},{"line_number":466,"context_line":"        tenant \u003d {\u0027id\u0027: \u0027fake1\u0027, \u0027name\u0027: \u0027fake\u0027,"},{"line_number":467,"context_line":"                  \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"},{"line_number":468,"context_line":"                  \u0027is_domain\u0027: True}"},{"line_number":469,"context_line":"        self.resource_api.create_project(\u0027fake1\u0027, tenant)"}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_3249c831","line":466,"in_reply_to":"fa1b9901_d90d4f3f","updated":"2015-08-28 22:41:03.000000000","message":"Done","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79d1ba20a59c3e54008a880a0bbaae5455760f47","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"            \u0027N/A: Not relevant for multi ldap testing\u0027)"},{"line_number":2971,"context_line":""},{"line_number":2972,"context_line":"    # NOTE(samueldmq): Tests in this class have LDAP as the default identity"},{"line_number":2973,"context_line":"    # driver mapping the default domain. Thus, new created domains cannot be"},{"line_number":2974,"context_line":"    # mapped in a identity driver and then fail on any identity action. This"},{"line_number":2975,"context_line":"    # test fails because, when deleting a domain, the list of users for that"},{"line_number":2976,"context_line":"    # domain needs to be retrieved, in order to execute token revocations."}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_04403a33","line":2973,"updated":"2015-08-25 15:14:50.000000000","message":"newly*?","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"961f7bf690353c1683aedba607a61ed2419ab6f5","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"            \u0027N/A: Not relevant for multi ldap testing\u0027)"},{"line_number":2971,"context_line":""},{"line_number":2972,"context_line":"    # NOTE(samueldmq): Tests in this class have LDAP as the default identity"},{"line_number":2973,"context_line":"    # driver mapping the default domain. Thus, new created domains cannot be"},{"line_number":2974,"context_line":"    # mapped in a identity driver and then fail on any identity action. This"},{"line_number":2975,"context_line":"    # test fails because, when deleting a domain, the list of users for that"},{"line_number":2976,"context_line":"    # domain needs to be retrieved, in order to execute token revocations."}],"source_content_type":"text/x-python","patch_set":85,"id":"fa1b9901_9260d4a6","line":2973,"in_reply_to":"fa1b9901_04403a33","updated":"2015-08-28 22:41:03.000000000","message":"Done","commit_id":"08fd4546751c77de702e4bbbc31391cf51ed4fff"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d7737883e37ae5899f814138e35f0ed4fcd4efe8","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self.assertFalse(r.result[\u0027project\u0027][\u0027enabled\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_update_is_domain_project_updates_domain(self):"},{"line_number":243,"context_line":"        \"\"\"Call ``POST /projects`` and check the domain is updated.\"\"\""},{"line_number":244,"context_line":"        pass"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def test_disable_domain(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_b9c5538f","line":243,"updated":"2015-04-14 00:00:40.000000000","message":"is there meant to be something in this test :-) ?","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7cbdd66f808eb37441c1826574c2f5ae47474c22","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self.assertFalse(r.result[\u0027project\u0027][\u0027enabled\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_update_is_domain_project_updates_domain(self):"},{"line_number":243,"context_line":"        \"\"\"Call ``POST /projects`` and check the domain is updated.\"\"\""},{"line_number":244,"context_line":"        pass"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def test_disable_domain(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_3c75b197","line":243,"in_reply_to":"7aaa499b_b9c5538f","updated":"2015-04-14 00:48:46.000000000","message":"I believe so... hahaha I\u0027ll do this test. Sorry about that.","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d7737883e37ae5899f814138e35f0ed4fcd4efe8","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            \u0027project_id\u0027: r.result[\u0027domain\u0027][\u0027id\u0027]}, expected_status\u003d404)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_delete_is_domain_project_deletes_domain(self):"},{"line_number":434,"context_line":"        \"\"\"Call ``DELETE /projects`` and check the domain is deleted.\"\"\""},{"line_number":435,"context_line":"        pass"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_delete_default_domain_fails(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_f9cabba0","line":434,"updated":"2015-04-14 00:00:40.000000000","message":"??","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7cbdd66f808eb37441c1826574c2f5ae47474c22","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            \u0027project_id\u0027: r.result[\u0027domain\u0027][\u0027id\u0027]}, expected_status\u003d404)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_delete_is_domain_project_deletes_domain(self):"},{"line_number":434,"context_line":"        \"\"\"Call ``DELETE /projects`` and check the domain is deleted.\"\"\""},{"line_number":435,"context_line":"        pass"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_delete_default_domain_fails(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"7aaa499b_fc6e29c8","line":434,"in_reply_to":"7aaa499b_f9cabba0","updated":"2015-04-14 00:48:46.000000000","message":"and here too.","commit_id":"6266565383b947f736eee86596886c8f5da3a89c"}]}
