)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6bcbe61ab67878bdca6dc7dc5f20a791b334ead6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add is_domain field in Project Table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Creates an \u0027is_domain\u0027 field in project table, setting it as False by"},{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_3ceb4d14","line":10,"updated":"2015-08-14 19:22:16.000000000","message":"I would say that this patch provides the basic storage, and the flag is not yet interpreted anywhere","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"8dc2acfc162aa7bb23ef4a5fb0d0bbd223b27d7a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add is_domain field in Project Table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Creates an \u0027is_domain\u0027 field in project table, setting it as False by"},{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_e7079216","line":10,"in_reply_to":"1a4dcd0f_3ceb4d14","updated":"2015-08-14 19:43:57.000000000","message":"Done","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6bcbe61ab67878bdca6dc7dc5f20a791b334ead6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Creates an \u0027is_domain\u0027 field in project table, setting it as False by"},{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_3c9d8dbb","line":11,"updated":"2015-08-14 19:22:16.000000000","message":"..should say we don\u0027t support seeing it to True via the rest API....","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"8dc2acfc162aa7bb23ef4a5fb0d0bbd223b27d7a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Creates an \u0027is_domain\u0027 field in project table, setting it as False by"},{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_4701a603","line":11,"in_reply_to":"1a4dcd0f_3c9d8dbb","updated":"2015-08-14 19:43:57.000000000","message":"Done","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6bcbe61ab67878bdca6dc7dc5f20a791b334ead6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This attribute is only available in v3. Hence, it\u0027s filtered in v2."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_7c8a3566","line":13,"updated":"2015-08-14 19:22:16.000000000","message":"I wouldn\u0027t be explicit here...just say in subsequent patches","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"8dc2acfc162aa7bb23ef4a5fb0d0bbd223b27d7a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"default. We currently do not allow the creation of a project with this"},{"line_number":11,"context_line":"flag set to True. We will allow the creation of projects acting as"},{"line_number":12,"context_line":"domains (is_domain\u003dTrue) in this follow up patch:"},{"line_number":13,"context_line":"https://review.openstack.org/#/c/143763/"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This attribute is only available in v3. Hence, it\u0027s filtered in v2."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_7c00f502","line":13,"in_reply_to":"1a4dcd0f_7c8a3566","updated":"2015-08-14 19:43:57.000000000","message":"Done","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"}],"keystone/resource/backends/ldap.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a1abfd1a2eb5a34a4f91e960cbea90d61ec2e93a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if parent_id is not None:"},{"line_number":78,"context_line":"            raise exception.InvalidParentProject(parent_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _validate_is_domain_project_is_false(self, ref):"},{"line_number":81,"context_line":"        is_domain \u003d ref.get(\u0027is_domain\u0027)"},{"line_number":82,"context_line":"        if is_domain:"},{"line_number":83,"context_line":"            raise exception.ValidationError(_(\u0027LDAP does not support projects \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_e49d835a","line":80,"updated":"2015-08-17 13:43:26.000000000","message":"would change this method name: _assert_not_is_domain_project() - only if we have -1 reviews","commit_id":"2904312022ff20c856c469057541a630dc46fd0e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"aaf3dafbf5e282a3e05d7c97c4990d497f91e38b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        if parent_id is not None:"},{"line_number":78,"context_line":"            raise exception.InvalidParentProject(parent_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _validate_is_domain_project_is_false(self, ref):"},{"line_number":81,"context_line":"        is_domain \u003d ref.get(\u0027is_domain\u0027)"},{"line_number":82,"context_line":"        if is_domain:"},{"line_number":83,"context_line":"            raise exception.ValidationError(_(\u0027LDAP does not support projects \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_5354f01f","line":80,"in_reply_to":"fa1b9901_e49d835a","updated":"2015-08-18 19:00:03.000000000","message":"Done","commit_id":"2904312022ff20c856c469057541a630dc46fd0e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        elif isinstance(ref, list):"},{"line_number":67,"context_line":"            return [self._set_default_is_domain_project(x) for x in ref]"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            raise ValueError(_(\u0027Expected dict or list: %s\u0027) % type(ref))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _validate_parent_project_is_none(self, ref):"},{"line_number":72,"context_line":"        \"\"\"If a parent_id different from None was given,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_bea8738e","line":69,"updated":"2015-08-19 20:54:41.000000000","message":"mark this line with \"# pragma: no cover\" for the coverage report.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"keystone/resource/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    enabled \u003d sql.Column(sql.Boolean)"},{"line_number":255,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":256,"context_line":"    parent_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027project.id\u0027))"},{"line_number":257,"context_line":"    is_domain \u003d sql.Column(sql.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":258,"context_line":"    # Unique constraint across two columns to create the separation"},{"line_number":259,"context_line":"    # rather than just only \u0027name\u0027 being unique"},{"line_number":260,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_d84c5fca","line":257,"updated":"2015-08-19 20:54:41.000000000","message":"this needs server_default\u003dsqlalchemy.sql.expression.false() to match the migration.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"keystone/resource/controllers.py":[{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"73aca6b61248fe520ea68e3f2b3950b7e9d3c115","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        if project_ref.get(\u0027is_domain\u0027):"},{"line_number":64,"context_line":"            raise exception.ProjectNotFound(project_id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return project_ref"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @controller.v2_deprecated"},{"line_number":69,"context_line":"    def get_project(self, context, tenant_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_bf63d440","line":66,"updated":"2015-08-14 17:56:44.000000000","message":"This return is not necessary","commit_id":"548e43ddad14a7dc935e9c97bd04e559fa56f7d5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # TODO(termie): this stuff should probably be moved to middleware"},{"line_number":69,"context_line":"        self.assert_admin(context)"},{"line_number":70,"context_line":"        ref \u003d self.resource_api.get_project(tenant_id)"},{"line_number":71,"context_line":"        self._assert_not_is_domain_project(tenant_id, ref)"},{"line_number":72,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(ref)}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_08d5e119","line":71,"updated":"2015-08-15 11:24:44.000000000","message":"I think we need a test for this..t","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # TODO(termie): this stuff should probably be moved to middleware"},{"line_number":69,"context_line":"        self.assert_admin(context)"},{"line_number":70,"context_line":"        ref \u003d self.resource_api.get_project(tenant_id)"},{"line_number":71,"context_line":"        self._assert_not_is_domain_project(tenant_id, ref)"},{"line_number":72,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(ref)}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_591f3909","line":71,"in_reply_to":"1a4dcd0f_08d5e119","updated":"2015-08-15 18:17:55.000000000","message":"Done. Just applied the tests on this follow up patch https://review.openstack.org/#/c/212045/3/keystone/tests/unit/test_v2_controller.py in this one","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @controller.v2_deprecated"},{"line_number":75,"context_line":"    def get_project_by_name(self, context, tenant_name):"},{"line_number":76,"context_line":"        self.assert_admin(context)"},{"line_number":77,"context_line":"        # Projects acting as a domain should not be visible via v2"},{"line_number":78,"context_line":"        ref \u003d self.resource_api.get_project_by_name("},{"line_number":79,"context_line":"            tenant_name, CONF.identity.default_domain_id)"},{"line_number":80,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(ref)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_c8de193e","line":77,"updated":"2015-08-15 11:24:44.000000000","message":"same here","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @controller.v2_deprecated"},{"line_number":75,"context_line":"    def get_project_by_name(self, context, tenant_name):"},{"line_number":76,"context_line":"        self.assert_admin(context)"},{"line_number":77,"context_line":"        # Projects acting as a domain should not be visible via v2"},{"line_number":78,"context_line":"        ref \u003d self.resource_api.get_project_by_name("},{"line_number":79,"context_line":"            tenant_name, CONF.identity.default_domain_id)"},{"line_number":80,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(ref)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_791a351a","line":77,"in_reply_to":"1a4dcd0f_c8de193e","updated":"2015-08-15 18:17:55.000000000","message":"Done","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    @controller.v2_deprecated"},{"line_number":99,"context_line":"    def update_project(self, context, tenant_id, tenant):"},{"line_number":100,"context_line":"        self.assert_admin(context)"},{"line_number":101,"context_line":"        self._assert_not_is_domain_project(tenant_id)"},{"line_number":102,"context_line":"        # Remove domain_id and is_domain if specified - a v2 api caller"},{"line_number":103,"context_line":"        # should not be specifying that"},{"line_number":104,"context_line":"        clean_tenant \u003d tenant.copy()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_88e1f1fe","line":101,"updated":"2015-08-15 11:24:44.000000000","message":"and here","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    @controller.v2_deprecated"},{"line_number":99,"context_line":"    def update_project(self, context, tenant_id, tenant):"},{"line_number":100,"context_line":"        self.assert_admin(context)"},{"line_number":101,"context_line":"        self._assert_not_is_domain_project(tenant_id)"},{"line_number":102,"context_line":"        # Remove domain_id and is_domain if specified - a v2 api caller"},{"line_number":103,"context_line":"        # should not be specifying that"},{"line_number":104,"context_line":"        clean_tenant \u003d tenant.copy()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_1919b122","line":101,"in_reply_to":"1a4dcd0f_88e1f1fe","updated":"2015-08-15 18:17:55.000000000","message":"Done","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @controller.v2_deprecated"},{"line_number":112,"context_line":"    def delete_project(self, context, tenant_id):"},{"line_number":113,"context_line":"        self.assert_admin(context)"},{"line_number":114,"context_line":"        self._assert_not_is_domain_project(tenant_id)"},{"line_number":115,"context_line":"        self.resource_api.delete_project(tenant_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_28f0ddc8","line":114,"updated":"2015-08-15 11:24:44.000000000","message":"and here","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @controller.v2_deprecated"},{"line_number":112,"context_line":"    def delete_project(self, context, tenant_id):"},{"line_number":113,"context_line":"        self.assert_admin(context)"},{"line_number":114,"context_line":"        self._assert_not_is_domain_project(tenant_id)"},{"line_number":115,"context_line":"        self.resource_api.delete_project(tenant_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_3914ade7","line":114,"in_reply_to":"1a4dcd0f_28f0ddc8","updated":"2015-08-15 18:17:55.000000000","message":"Done","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            CONF.identity.default_domain_id)"},{"line_number":50,"context_line":"        tenant_refs \u003d [self.v3_to_v2_project(tenant_ref)"},{"line_number":51,"context_line":"                       for tenant_ref in tenant_refs"},{"line_number":52,"context_line":"                       if not tenant_ref.get(\u0027is_domain\u0027)]"},{"line_number":53,"context_line":"        params \u003d {"},{"line_number":54,"context_line":"            \u0027limit\u0027: context[\u0027query_string\u0027].get(\u0027limit\u0027),"},{"line_number":55,"context_line":"            \u0027marker\u0027: context[\u0027query_string\u0027].get(\u0027marker\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_3b7c751e","line":52,"updated":"2015-08-19 20:54:41.000000000","message":"Add a comment what this is doing or create a function that has a name that explains what it does.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @controller.v2_deprecated"},{"line_number":75,"context_line":"    def get_project_by_name(self, context, tenant_name):"},{"line_number":76,"context_line":"        self.assert_admin(context)"},{"line_number":77,"context_line":"        # Projects acting as a domain should not be visible via v2"},{"line_number":78,"context_line":"        ref \u003d self.resource_api.get_project_by_name("},{"line_number":79,"context_line":"            tenant_name, CONF.identity.default_domain_id)"},{"line_number":80,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(ref)}"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_3b95553e","line":77,"updated":"2015-08-19 20:54:41.000000000","message":"What\u0027s the point of this comment?","commit_id":"0b8248364bb757da135fc05973490b33ad994530"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assert_admin(context)"},{"line_number":92,"context_line":"        tenant_ref[\u0027id\u0027] \u003d tenant_ref.get(\u0027id\u0027, uuid.uuid4().hex)"},{"line_number":93,"context_line":"        tenant \u003d self.resource_api.create_project("},{"line_number":94,"context_line":"            tenant_ref[\u0027id\u0027],"},{"line_number":95,"context_line":"            self._normalize_domain_id(context, tenant_ref))"},{"line_number":96,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(tenant)}"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_7b018d69","line":93,"updated":"2015-08-19 20:54:41.000000000","message":"create needs to make sure that is_domain isn\u0027t set.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        # should not be specifying that"},{"line_number":104,"context_line":"        clean_tenant \u003d tenant.copy()"},{"line_number":105,"context_line":"        clean_tenant.pop(\u0027domain_id\u0027, None)"},{"line_number":106,"context_line":"        clean_tenant.pop(\u0027is_domain\u0027, None)"},{"line_number":107,"context_line":"        tenant_ref \u003d self.resource_api.update_project("},{"line_number":108,"context_line":"            tenant_id, clean_tenant)"},{"line_number":109,"context_line":"        return {\u0027tenant\u0027: self.v3_to_v2_project(tenant_ref)}"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_d8045f19","line":106,"updated":"2015-08-19 20:54:41.000000000","message":"I\u0027d prefer the v2 controller forced the field to False rather than removing it.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"keystone/resource/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"de864d24989b9a4e972d00ebd7d57bed453a9ae2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        tenant[\u0027enabled\u0027] \u003d clean.project_enabled(tenant[\u0027enabled\u0027])"},{"line_number":89,"context_line":"        tenant.setdefault(\u0027description\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"        tenant.setdefault(\u0027parent_id\u0027, None)"},{"line_number":91,"context_line":"        tenant.setdefault(\u0027is_domain\u0027, None)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.get_domain(tenant.get(\u0027domain_id\u0027))"},{"line_number":94,"context_line":"        if tenant.get(\u0027parent_id\u0027) is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_46af48e3","line":91,"updated":"2015-08-17 01:49:50.000000000","message":"iirc the is_domain field isn\u0027t nullable","commit_id":"1204d31254474e714745d777be5f640db689709c"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9b3b81ab250a4df0597ba64cf3b9aa6a92b94196","unresolved":false,"context_lines":[{"line_number":2188,"context_line":"        # The is_domain flag should be False by default"},{"line_number":2189,"context_line":"        self.assertFalse(ref[\u0027is_domain\u0027])"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2192,"context_line":"    def test_create_is_domain_project(self):"},{"line_number":2193,"context_line":"        project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":2194,"context_line":"                   \u0027description\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_5d171c45","line":2191,"updated":"2015-08-16 10:23:22.000000000","message":"so I understand why you put this here (LDAP doesn\u0027t support is_domain), but this really has nothing to do with multiple domain support.  We are also not testing the code we added to the ldap driver to handle not supporting is_domain.  We should override this test  in test_backend_ldap.py (and others if necessary) to instead check we get the expected result if you have an ldap backend.","commit_id":"09fe734fc63cdd541e44e85c83780dd300f3d37a"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"dd89dac8ef5a447fe7669ca2b49df868e7b9895b","unresolved":false,"context_lines":[{"line_number":2188,"context_line":"        # The is_domain flag should be False by default"},{"line_number":2189,"context_line":"        self.assertFalse(ref[\u0027is_domain\u0027])"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2192,"context_line":"    def test_create_is_domain_project(self):"},{"line_number":2193,"context_line":"        project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":2194,"context_line":"                   \u0027description\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_d7c9c826","line":2191,"in_reply_to":"1a4dcd0f_1d84345b","updated":"2015-08-16 18:02:47.000000000","message":"I understand what you mean, and I agree. I\u0027ll change that.","commit_id":"09fe734fc63cdd541e44e85c83780dd300f3d37a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a0de52fc6ddeb0d0b0edbd8c24d09d4264e96f07","unresolved":false,"context_lines":[{"line_number":2188,"context_line":"        # The is_domain flag should be False by default"},{"line_number":2189,"context_line":"        self.assertFalse(ref[\u0027is_domain\u0027])"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2192,"context_line":"    def test_create_is_domain_project(self):"},{"line_number":2193,"context_line":"        project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":2194,"context_line":"                   \u0027description\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_1d84345b","line":2191,"in_reply_to":"1a4dcd0f_5d171c45","updated":"2015-08-16 16:35:01.000000000","message":"ps: just for clarification...what I meant by \"this really has nothing to do with multiple domains\" is that for this patch, that is not the issue (since we don\u0027t interpret the is_domain flag)","commit_id":"09fe734fc63cdd541e44e85c83780dd300f3d37a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":2188,"context_line":"        # The is_domain flag should be False by default"},{"line_number":2189,"context_line":"        self.assertFalse(ref[\u0027is_domain\u0027])"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"    def test_create_is_domain_project(self):"},{"line_number":2192,"context_line":"        project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":2193,"context_line":"                   \u0027description\u0027: \u0027\u0027,"},{"line_number":2194,"context_line":"                   \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_bb896577","line":2191,"updated":"2015-08-19 20:54:41.000000000","message":"There should also be a test with is_domain set to False.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"11f8ed8b5f7c408c27a9946702e1b50d63734846","unresolved":false,"context_lines":[{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":1651,"context_line":"                          self.resource_api.create_project,"},{"line_number":1652,"context_line":"                          project[\u0027id\u0027], project)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"    def test_check_leaf_projects(self):"},{"line_number":1655,"context_line":"        projects \u003d self._assert_create_hierarchy_not_allowed()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ae72c447","line":1652,"updated":"2015-08-18 17:58:48.000000000","message":"we should also test update project.","commit_id":"2904312022ff20c856c469057541a630dc46fd0e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"aaf3dafbf5e282a3e05d7c97c4990d497f91e38b","unresolved":false,"context_lines":[{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":1651,"context_line":"                          self.resource_api.create_project,"},{"line_number":1652,"context_line":"                          project[\u0027id\u0027], project)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"    def test_check_leaf_projects(self):"},{"line_number":1655,"context_line":"        projects \u003d self._assert_create_hierarchy_not_allowed()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_7326d4cf","line":1652,"in_reply_to":"fa1b9901_ae72c447","updated":"2015-08-18 19:00:03.000000000","message":"Done","commit_id":"2904312022ff20c856c469057541a630dc46fd0e"}],"keystone/tests/unit/test_v2_controller.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            project[\u0027id\u0027]"},{"line_number":128,"context_line":"        )"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def test_list_is_domain_project_not_found(self):"},{"line_number":131,"context_line":"        \"\"\"Test v2 get_all_projects having projects that act as a domain."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"           In v2 no project with the is_domain flag enabled should be"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_bb0c05ee","line":130,"updated":"2015-08-19 20:54:41.000000000","message":"change not_found to not_returned","commit_id":"0b8248364bb757da135fc05973490b33ad994530"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def test_list_is_domain_project_not_found(self):"},{"line_number":131,"context_line":"        \"\"\"Test v2 get_all_projects having projects that act as a domain."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"           In v2 no project with the is_domain flag enabled should be"},{"line_number":134,"context_line":"           returned."},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":"        project1 \u003d self._create_is_domain_project()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_9b6021a7","line":133,"updated":"2015-08-19 20:54:41.000000000","message":"this is over-indented.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        project2 \u003d self._create_is_domain_project()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        refs \u003d self.tenant_controller.get_all_projects(_ADMIN_CONTEXT)"},{"line_number":140,"context_line":"        projects \u003d refs.get(\u0027tenants\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        self.assertNotIn(project1, projects)"},{"line_number":143,"context_line":"        self.assertNotIn(project2, projects)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_9b07c1c9","line":140,"updated":"2015-08-19 20:54:41.000000000","message":"use [] rather than .get.","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7db8c60e2aa10065f5c0f4592ad7204f854f17d","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        ref \u003d self.new_ref()"},{"line_number":300,"context_line":"        return ref"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def new_project_ref(self, domain_id\u003dNone, parent_id\u003dNone, is_domain\u003dFalse):"},{"line_number":303,"context_line":"        ref \u003d self.new_ref()"},{"line_number":304,"context_line":"        ref[\u0027domain_id\u0027] \u003d domain_id"},{"line_number":305,"context_line":"        ref[\u0027parent_id\u0027] \u003d parent_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_7b298d36","line":302,"updated":"2015-08-19 20:54:41.000000000","message":"why was domain_id made optional?","commit_id":"0b8248364bb757da135fc05973490b33ad994530"}],"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":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        self.post(\u0027/projects\u0027, body\u003d{\u0027project\u0027: ref}, expected_status\u003d400)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def test_create_project_is_domain_not_allowed(self):"},{"line_number":531,"context_line":"        \"\"\"Call ``POST /projects``.\"\"\""},{"line_number":532,"context_line":"        ref \u003d self.new_project_ref(domain_id\u003dself.domain_id)"},{"line_number":533,"context_line":"        ref[\u0027is_domain\u0027] \u003d True"},{"line_number":534,"context_line":"        self.post(\u0027/projects\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_e8b8b5ea","line":531,"updated":"2015-08-15 11:24:44.000000000","message":"may want to add to the docstring that setting os is_domain is not yet support and so should return Not Implemented","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        self.post(\u0027/projects\u0027, body\u003d{\u0027project\u0027: ref}, expected_status\u003d400)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def test_create_project_is_domain_not_allowed(self):"},{"line_number":531,"context_line":"        \"\"\"Call ``POST /projects``.\"\"\""},{"line_number":532,"context_line":"        ref \u003d self.new_project_ref(domain_id\u003dself.domain_id)"},{"line_number":533,"context_line":"        ref[\u0027is_domain\u0027] \u003d True"},{"line_number":534,"context_line":"        self.post(\u0027/projects\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_59e65917","line":531,"in_reply_to":"1a4dcd0f_e8b8b5ea","updated":"2015-08-15 18:17:55.000000000","message":"Done","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ff2f625d5900dde9065ba6421af2e72a7ea43ef0","unresolved":false,"context_lines":[{"line_number":951,"context_line":"            expected_status\u003d403)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_update_project_is_domain_not_allowed(self):"},{"line_number":954,"context_line":"        \"\"\"Call ``PATCH /projects/{project_id}`` with domain_id.\"\"\""},{"line_number":955,"context_line":"        project \u003d self.new_project_ref(domain_id\u003dself.domain[\u0027id\u0027])"},{"line_number":956,"context_line":"        project[\u0027is_domain\u0027] \u003d False"},{"line_number":957,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_08bc01da","line":954,"updated":"2015-08-15 11:24:44.000000000","message":"same here","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"747d011a9b9f54b25a92929ed790b3dd5812a816","unresolved":false,"context_lines":[{"line_number":951,"context_line":"            expected_status\u003d403)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_update_project_is_domain_not_allowed(self):"},{"line_number":954,"context_line":"        \"\"\"Call ``PATCH /projects/{project_id}`` with domain_id.\"\"\""},{"line_number":955,"context_line":"        project \u003d self.new_project_ref(domain_id\u003dself.domain[\u0027id\u0027])"},{"line_number":956,"context_line":"        project[\u0027is_domain\u0027] \u003d False"},{"line_number":957,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_d9b4a9d5","line":954,"in_reply_to":"1a4dcd0f_08bc01da","updated":"2015-08-15 18:17:55.000000000","message":"Not exactly... in this case, we\u0027ll never allow the update of this flag. so, we can just show the ValidationError.","commit_id":"ac3e7cb746bedf60033926c495bd8bcba067fa30"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"de864d24989b9a4e972d00ebd7d57bed453a9ae2","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        NotImplemented."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        \"\"\""},{"line_number":537,"context_line":"        ref \u003d self.new_project_ref(domain_id\u003dself.domain_id)"},{"line_number":538,"context_line":"        ref[\u0027is_domain\u0027] \u003d True"},{"line_number":539,"context_line":"        self.post(\u0027/projects\u0027,"},{"line_number":540,"context_line":"                  body\u003d{\u0027project\u0027: ref},"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_06906094","line":537,"updated":"2015-08-17 01:49:50.000000000","message":"why not pass the is_domain parameter here?","commit_id":"1204d31254474e714745d777be5f640db689709c"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"de864d24989b9a4e972d00ebd7d57bed453a9ae2","unresolved":false,"context_lines":[{"line_number":962,"context_line":""},{"line_number":963,"context_line":"        \"\"\""},{"line_number":964,"context_line":"        project \u003d self.new_project_ref(domain_id\u003dself.domain[\u0027id\u0027])"},{"line_number":965,"context_line":"        project[\u0027is_domain\u0027] \u003d False"},{"line_number":966,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":967,"context_line":"        project[\u0027is_domain\u0027] \u003d True"},{"line_number":968,"context_line":"        self.patch(\u0027/projects/%(project_id)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_c6e83819","line":965,"updated":"2015-08-17 01:49:50.000000000","message":"it is already False","commit_id":"1204d31254474e714745d777be5f640db689709c"}]}
