)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Mixed LDAP/SQL Backend."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Supports the configuration where LDAP is user for  identity and"},{"line_number":10,"context_line":"SQL is used for assignment."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint split-identity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAP3%2F%2F4hs%3D","line":9,"updated":"2013-07-09 20:52:45.000000000","message":"used for","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4b702b1798bb77f613607760dc0ffe7f3f48a669","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Mixed LDAP/SQL Backend."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Supports the configuration where LDAP is user for  identity and"},{"line_number":10,"context_line":"SQL is used for assignment."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint split-identity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAP3%2F%2F3u0%3D","line":9,"in_reply_to":"AAAAP3%2F%2F4hs%3D","updated":"2013-07-10 01:54:48.000000000","message":"Done","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        elif isinstance(ref, list):"},{"line_number":132,"context_line":"            return [self._set_default_domain(x) for x in ref]"},{"line_number":133,"context_line":"        else:"},{"line_number":134,"context_line":"            raise ValueError(_(\u0027Expected dict or list: %s\u0027) % type(ref))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":137,"context_line":"        tenant \u003d self._validate_domain(tenant)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4hI%3D","side":"PARENT","line":134,"updated":"2013-07-09 20:52:45.000000000","message":"i don\u0027t see where any of this was moved to? was it already copied to to common.ldap and is now duplicated here? if so, could make this a discrete change","commit_id":"fafdf072f5a34ee12ffe9d7651551c83459759bb"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"73fe5b8b7c54632915787ea0d40e7ee7fe83402a","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        elif isinstance(ref, list):"},{"line_number":132,"context_line":"            return [self._set_default_domain(x) for x in ref]"},{"line_number":133,"context_line":"        else:"},{"line_number":134,"context_line":"            raise ValueError(_(\u0027Expected dict or list: %s\u0027) % type(ref))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def create_project(self, tenant_id, tenant):"},{"line_number":137,"context_line":"        tenant \u003d self._validate_domain(tenant)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4YM%3D","side":"PARENT","line":134,"in_reply_to":"AAAAP3%2F%2F4hI%3D","updated":"2013-07-09 21:04:37.000000000","message":"These were moved to /assignment/core.py  But again with them being moved to a more general place the method names should be more precise (e.g. _validate_default_domain","commit_id":"fafdf072f5a34ee12ffe9d7651551c83459759bb"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19d95ea251767cbf33f78bd819a9def34717384a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":99,"context_line":"                     domain_id\u003dNone, project_id\u003dNone):"},{"line_number":100,"context_line":"        if user_id:"},{"line_number":101,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        session \u003d self.get_session()"},{"line_number":104,"context_line":"        self._get_role(session, role_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2Fs9g%3D","line":101,"updated":"2013-07-12 18:48:18.000000000","message":"why is this driver calling directly into another driver??","commit_id":"5a0163d727b2fe4e4b99df5597848d7ea2c83391"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9cc87fcac36810ad9e002ae87b538626d01550e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        session \u003d self.get_session()"},{"line_number":152,"context_line":"        role_ref \u003d self._get_role(session, role_id)"},{"line_number":153,"context_line":"        if user_id:"},{"line_number":154,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":155,"context_line":"        if group_id:"},{"line_number":156,"context_line":"            self.identity_api.get_group(group_id)"},{"line_number":157,"context_line":"        if domain_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fs3U%3D","line":154,"updated":"2013-07-12 19:11:43.000000000","message":"these two should be above the session call, I think","commit_id":"f3196d94b91a79b27d07d01a651b7d98ee694b64"}],"keystone/assignment/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def set_default_domain(ref):"},{"line_number":31,"context_line":"    \"\"\"If the domain ID has not been set, set it to the default.\"\"\""},{"line_number":32,"context_line":"    if isinstance(ref, dict):"},{"line_number":33,"context_line":"        if \u0027domain_id\u0027 not in ref:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4cs%3D","line":30,"updated":"2013-07-09 20:52:45.000000000","message":"this should be a base manager method rather than duplicated","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4b702b1798bb77f613607760dc0ffe7f3f48a669","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def set_default_domain(ref):"},{"line_number":31,"context_line":"    \"\"\"If the domain ID has not been set, set it to the default.\"\"\""},{"line_number":32,"context_line":"    if isinstance(ref, dict):"},{"line_number":33,"context_line":"        if \u0027domain_id\u0027 not in ref:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F3u4%3D","line":30,"in_reply_to":"AAAAP3%2F%2F4cs%3D","updated":"2013-07-10 01:54:48.000000000","message":"Done","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"079da30e32b2a84bce8b2fbcf321b469eb26bf90","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        raise exception.NotImplemented()"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    #LDAP specific domain management functions"},{"line_number":430,"context_line":"    def _validate_domain(self, ref):"},{"line_number":431,"context_line":"        \"\"\"Validate that either the default domain or nothing is specified."},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        Also removes the domain from the ref so that LDAP doesn\u0027t have to"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4lE%3D","line":430,"updated":"2013-07-09 20:20:33.000000000","message":"Should you put LDAP in the method name since this is an LDAP specific domain management function?  I think this will make the code easier to read when this method is called.","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"47fc19ea8603f5a4882eba9d793b6c4e7c04c02b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        raise exception.NotImplemented()"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    #LDAP specific domain management functions"},{"line_number":430,"context_line":"    def _validate_domain(self, ref):"},{"line_number":431,"context_line":"        \"\"\"Validate that either the default domain or nothing is specified."},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        Also removes the domain from the ref so that LDAP doesn\u0027t have to"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4f4%3D","line":430,"in_reply_to":"AAAAP3%2F%2F4lE%3D","updated":"2013-07-09 20:31:11.000000000","message":"I don\u0027t think so.  The logic could be reused buy , say the PAM provider in the future.  I\u0027ll change the comment to indicate more explicitly why this is here.","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"079da30e32b2a84bce8b2fbcf321b469eb26bf90","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        self._validate_domain_id(domain_id)"},{"line_number":440,"context_line":"        return ref"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _validate_domain_id(self, domain_id):"},{"line_number":443,"context_line":"        \"\"\"Validate that the domain ID specified belongs to the default domain."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4k8%3D","line":442,"updated":"2013-07-09 20:20:33.000000000","message":"Should you put LDAP in the method name since this is an LDAP specific domain management function?  I think this will make the code easier to read when this method is called.","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"079da30e32b2a84bce8b2fbcf321b469eb26bf90","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        if domain_id !\u003d CONF.identity.default_domain_id:"},{"line_number":447,"context_line":"            raise exception.DomainNotFound(domain_id\u003ddomain_id)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _set_default_domain(self, ref):"},{"line_number":450,"context_line":"        \"\"\"If the domain ID has not been set, set it to the default.\"\"\""},{"line_number":451,"context_line":"        return set_default_domain(ref)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4k4%3D","line":449,"updated":"2013-07-09 20:20:33.000000000","message":"Should you put LDAP in the method name since this is an LDAP specific domain management function?  I think this will make the code easier to read when this method is called.","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"666b14b40c9e4f993a5f16a398689f01420e65ba","unresolved":false,"context_lines":[{"line_number":429,"context_line":"    #domain management functions for backends that only allow a single domain."},{"line_number":430,"context_line":"    #currently, this is only LDAP, but might be used by PAM or other backends"},{"line_number":431,"context_line":"    #as well.  This is used by both identity and assignment drivers."},{"line_number":432,"context_line":"    def _validate_domain(self, ref):"},{"line_number":433,"context_line":"        \"\"\"Validate that either the default domain or nothing is specified."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        Also removes the domain from the ref so that LDAP doesn\u0027t have to"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F4eE%3D","line":432,"updated":"2013-07-09 20:47:49.000000000","message":"_validate_default_domain as the method name would better capture what this method does","commit_id":"07505228a79762397f5256f90f969aba4cc2c972"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"666b14b40c9e4f993a5f16a398689f01420e65ba","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        self._validate_domain_id(domain_id)"},{"line_number":442,"context_line":"        return ref"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def _validate_domain_id(self, domain_id):"},{"line_number":445,"context_line":"        \"\"\"Validate that the domain ID specified belongs to the default domain."},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F4dk%3D","line":444,"updated":"2013-07-09 20:47:49.000000000","message":"_validate_default_domain_id as the method name would better capture what this method does","commit_id":"07505228a79762397f5256f90f969aba4cc2c972"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4a119134a8a280657d3e709f8db3c93ae6563b40","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        for role_id in roles:"},{"line_number":151,"context_line":"            self.remove_role_from_user_and_project(user_id, tenant_id, role_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def authorize_for_project(self, tenant_id, user_ref):"},{"line_number":154,"context_line":"        \"\"\"Authenticate a given user for a tenant."},{"line_number":155,"context_line":"        :returns: (user_ref, tenant_ref, metadata_ref)"},{"line_number":156,"context_line":"        :raises: AssertionError"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FvNY%3D","line":153,"updated":"2013-07-12 06:03:54.000000000","message":"not sure if I understand this change. Where does authorize_for_project() come from and who uses it? I don\u0027t see any drivers implement this.","commit_id":"1b482bdabd2febbe66babf77f2de2c7884bd0e19"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4a119134a8a280657d3e709f8db3c93ae6563b40","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        (user, tenant, metadata) \u003d (self.driver.authorize_for_project"},{"line_number":159,"context_line":"                                    (tenant_id, user_ref))"},{"line_number":160,"context_line":"        user \u003d self.driver._set_default_domain(user)"},{"line_number":161,"context_line":"        return (user, tenant, metadata)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FvPg%3D","line":160,"updated":"2013-07-12 06:03:54.000000000","message":"don\u0027t we need _set_default_domain(tenant)?","commit_id":"1b482bdabd2febbe66babf77f2de2c7884bd0e19"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b4237ec65fcc2e2ba392626956a497708701fd75","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        \"\"\""},{"line_number":437,"context_line":"        raise exception.NotImplemented()"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    #domain management functions for backends that only allow a single domain."},{"line_number":440,"context_line":"    #currently, this is only LDAP, but might be used by PAM or other backends"},{"line_number":441,"context_line":"    #as well.  This is used by both identity and assignment drivers."},{"line_number":442,"context_line":"    def _set_default_domain(self, ref):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FxOk%3D","line":439,"updated":"2013-07-11 18:28:59.000000000","message":"Should this be NOTE\u0027d?","commit_id":"1b482bdabd2febbe66babf77f2de2c7884bd0e19"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"c2a613b43bf11bdec07d4c65fe4353e42b531364","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        \"\"\""},{"line_number":437,"context_line":"        raise exception.NotImplemented()"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    #domain management functions for backends that only allow a single domain."},{"line_number":440,"context_line":"    #currently, this is only LDAP, but might be used by PAM or other backends"},{"line_number":441,"context_line":"    #as well.  This is used by both identity and assignment drivers."},{"line_number":442,"context_line":"    def _set_default_domain(self, ref):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fw9k%3D","line":439,"in_reply_to":"AAAAP3%2F%2FxOk%3D","updated":"2013-07-11 19:28:46.000000000","message":"It is noted elsewhere the LDAP only supports a single domain.","commit_id":"1b482bdabd2febbe66babf77f2de2c7884bd0e19"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"19d95ea251767cbf33f78bd819a9def34717384a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(Manager, self).__init__(assignment_driver)"},{"line_number":57,"context_line":"        self.driver.identity_api \u003d identity_api"},{"line_number":58,"context_line":"        self.identity_api \u003d identity_api"},{"line_number":59,"context_line":"        self.identity_api.assignment_api \u003d self"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_roles_for_user_and_project(self, user_id, tenant_id):"},{"line_number":62,"context_line":"        def _get_group_project_roles(user_id, tenant_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2Fs84%3D","line":59,"updated":"2013-07-12 18:48:18.000000000","message":"wtf?\n\ni thought \"assignment\" was separated from identity? this is a joke","commit_id":"5a0163d727b2fe4e4b99df5597848d7ea2c83391"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d6037a05f001e90eac6e895d9d8095bcc8a5854d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                   \u0027 available on Identity API v2.\u0027),"},{"line_number":32,"context_line":"                  \u0027enabled\u0027: True,"},{"line_number":33,"context_line":"                  \u0027id\u0027: CONF.identity.default_domain_id,"},{"line_number":34,"context_line":"                  \u0027name\u0027: u\u0027Default\u0027}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@dependency.provider(\u0027assignment_api\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2FsaM%3D","line":34,"updated":"2013-07-12 21:31:48.000000000","message":"nice!","commit_id":"4be48868ef9b34e90e8e6028201bc3b0ac569c3d"}],"tests/backend_ldap_sql.conf":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":15,"context_line":"suffix \u003d cn\u003dexample,cn\u003dcom"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"[identity]"},{"line_number":18,"context_line":"driver \u003d keystone.identity.backends.ldap.Identity"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[assignment]"},{"line_number":21,"context_line":"driver \u003d keystone.assignment.backends.sql.Assignment"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAAP3%2F%2F4cE%3D","line":18,"updated":"2013-07-09 20:52:45.000000000","message":"you only have to specify non default configuration in these files... so you could just define the identity driver as ldap and exclude the rest","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4b702b1798bb77f613607760dc0ffe7f3f48a669","unresolved":false,"context_lines":[{"line_number":15,"context_line":"suffix \u003d cn\u003dexample,cn\u003dcom"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"[identity]"},{"line_number":18,"context_line":"driver \u003d keystone.identity.backends.ldap.Identity"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[assignment]"},{"line_number":21,"context_line":"driver \u003d keystone.assignment.backends.sql.Assignment"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAAP3%2F%2F3vg%3D","line":18,"in_reply_to":"AAAAP3%2F%2F4cE%3D","updated":"2013-07-10 01:54:48.000000000","message":"I thought of that, but this is explicit, and will still test correctly if the defaults were to change.","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"}],"tests/default_fixtures.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"a7067366ea232ad28ff89e0622244d660aa1e1ae","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":"]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"DOMAINS \u003d [assignment.DEFAULT_DOMAIN]"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2FsqQ%3D","line":124,"updated":"2013-07-12 20:25:37.000000000","message":"Nice!!!","commit_id":"4be48868ef9b34e90e8e6028201bc3b0ac569c3d"}],"tests/test_backend_ldap.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4a119134a8a280657d3e709f8db3c93ae6563b40","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        self.assertEquals("},{"line_number":738,"context_line":"            domains,"},{"line_number":739,"context_line":"            [{\u0027description\u0027:"},{"line_number":740,"context_line":"              (u\u0027Owns users and tenants (i.e. projects)\u0027"},{"line_number":741,"context_line":"               \u0027 available on Identity API v2.\u0027),"},{"line_number":742,"context_line":"              \u0027enabled\u0027: True,"},{"line_number":743,"context_line":"              \u0027id\u0027: CONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FvL8%3D","line":740,"updated":"2013-07-12 06:03:54.000000000","message":"default domain ref needs to be a global variable. Otherwise, if we have to update something, we have to update it in multiple places.","commit_id":"1b482bdabd2febbe66babf77f2de2c7884bd0e19"}],"tests/test_backend_mixed.py":[{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"87b50f96348e52382a441172d08d6b8654ad5165","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F7UQ%3D","line":3,"updated":"2013-07-09 02:53:10.000000000","message":"2013 ? :)","commit_id":"f5cd133c2fe5f9368f01ec88adb9566a9e726e9f"},{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"87b50f96348e52382a441172d08d6b8654ad5165","unresolved":false,"context_lines":[{"line_number":63,"context_line":"              (u\u0027Owns users and tenants (i.e. projects)\u0027"},{"line_number":64,"context_line":"               \u0027 available on Identity API v2.\u0027),"},{"line_number":65,"context_line":"              \u0027enabled\u0027: True,"},{"line_number":66,"context_line":"              \u0027id\u0027: u\u0027default\u0027,"},{"line_number":67,"context_line":"              \u0027name\u0027: u\u0027Default\u0027}])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_project_filter(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F7UM%3D","line":66,"updated":"2013-07-09 02:53:10.000000000","message":"Shouldn\u0027t the id be \"CONF.identity.default_domain_id\" instead of hard coded \"default\"?","commit_id":"f5cd133c2fe5f9368f01ec88adb9566a9e726e9f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4b4%3D","line":1,"updated":"2013-07-09 20:52:45.000000000","message":"the test_backend_* modules test specific backends... this module introduces 2 skipped tests, an empty test, and a test that belongs in a different module... just remove the delete the whole thing and put the one test where it belongs.. in test_backend_sql or whatever","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4b702b1798bb77f613607760dc0ffe7f3f48a669","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F3u8%3D","line":1,"in_reply_to":"AAAAP3%2F%2F4b4%3D","updated":"2013-07-10 01:54:48.000000000","message":"Done","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":29,"context_line":"DEFAULT_DOMAIN_ID \u003d CONF.identity.default_domain_id"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class LdapSqldentity(sql.Base, test.TestCase,"},{"line_number":33,"context_line":"                     test_backend_ldap.BaseLDAPIdentity):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _set_config(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4rg%3D","line":32,"updated":"2013-07-09 20:52:45.000000000","message":"sql-dentity? now you\u0027re just making stuff up ;)","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"}],"tests/test_drivers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0744d101862d19ddb746531c9587080b892779ac","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_assignment_driver_unimplemented(self):"},{"line_number":40,"context_line":"        interface \u003d assignment.Driver()"},{"line_number":41,"context_line":"        self.assertInterfaceNotImplemented(interface)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_catalog_driver_unimplemented(self):"},{"line_number":44,"context_line":"        interface \u003d catalog.Driver()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4ro%3D","line":41,"updated":"2013-07-09 20:52:45.000000000","message":"nice, i totally forgot about this file. we could add credentials and stuff here too","commit_id":"2d40b68a31a6470ff36e1b9b9cc2cb2104d00803"}]}
