)]}'
{"keystone/models/token_model.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b4dc193159c77f286c97ebcbe9c21805df070d09","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return timeutils.normalize_time(time_data)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeystoneToken(dict):"},{"line_number":36,"context_line":"    \"\"\"An in-memory representation that unifies v2 and v3 tokens.\"\"\""},{"line_number":37,"context_line":"    # TODO(morganfainberg): Align this in-memory representation with the"},{"line_number":38,"context_line":"    # objects in keystoneclient. This object should be eventually updated"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9418aa77","line":35,"updated":"2014-07-24 23:22:13.000000000","message":"This is really jolly clever....","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8aa8771ee855b84a2c496beb602ee46a1142aae6","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return timeutils.normalize_time(time_data)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class KeystoneToken(dict):"},{"line_number":36,"context_line":"    \"\"\"An in-memory representation that unifies v2 and v3 tokens.\"\"\""},{"line_number":37,"context_line":"    # TODO(morganfainberg): Align this in-memory representation with the"},{"line_number":38,"context_line":"    # objects in keystoneclient. This object should be eventually updated"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_743b1638","line":35,"in_reply_to":"baada198_9418aa77","updated":"2014-07-24 23:45:21.000000000","message":"Long term I want this to be even better (and maybe not dict-based), but it will work for now. It is a slightly different approach than what is use in keystoneclient, I can\u0027t take full credit for the idea","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @property"},{"line_number":84,"context_line":"    def user_domain_name(self):"},{"line_number":85,"context_line":"        return self[\u0027user\u0027].get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def user_domain_id(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_973b4937","line":85,"updated":"2014-07-25 03:54:25.000000000","message":"if v2, default domain?","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @property"},{"line_number":84,"context_line":"    def user_domain_name(self):"},{"line_number":85,"context_line":"        return self[\u0027user\u0027].get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def user_domain_id(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7a3e9c2a","line":85,"in_reply_to":"baada198_973b4937","updated":"2014-07-25 04:38:16.000000000","message":"In next patch, resolved.","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def user_domain_id(self):"},{"line_number":89,"context_line":"        return self[\u0027user\u0027].get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @property"},{"line_number":92,"context_line":"    def domain_id(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b744cdb8","line":89,"updated":"2014-07-25 03:54:25.000000000","message":"same as above?\n\nalso, if you have a domain object, then [\u0027id\u0027] or 500","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @property"},{"line_number":88,"context_line":"    def user_domain_id(self):"},{"line_number":89,"context_line":"        return self[\u0027user\u0027].get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @property"},{"line_number":92,"context_line":"    def domain_id(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_ba44b4b8","line":89,"in_reply_to":"baada198_b744cdb8","updated":"2014-07-25 04:38:16.000000000","message":"In next patch.","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @property"},{"line_number":92,"context_line":"    def domain_id(self):"},{"line_number":93,"context_line":"        if self.version is V3:"},{"line_number":94,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":95,"context_line":"        return None"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d74141a7","line":94,"updated":"2014-07-25 03:54:25.000000000","message":"[\u0027id\u0027] or let it raise 500","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @property"},{"line_number":92,"context_line":"    def domain_id(self):"},{"line_number":93,"context_line":"        if self.version is V3:"},{"line_number":94,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":95,"context_line":"        return None"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_da4168a7","line":94,"in_reply_to":"baada198_5a6f18c4","updated":"2014-07-25 04:38:16.000000000","message":"Done in next patch, always check scoped property first.","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e01b588a71ab53b4d6b07cc4428fd6b9bd2241d9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @property"},{"line_number":92,"context_line":"    def domain_id(self):"},{"line_number":93,"context_line":"        if self.version is V3:"},{"line_number":94,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":95,"context_line":"        return None"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_5a6f18c4","line":94,"in_reply_to":"baada198_d74141a7","updated":"2014-07-25 04:01:27.000000000","message":"Same as line 100","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def domain_name(self):"},{"line_number":99,"context_line":"        if self.version is V3:"},{"line_number":100,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":101,"context_line":"        return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f711e5af","line":100,"updated":"2014-07-25 03:54:25.000000000","message":"[\u0027name\u0027]","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def domain_name(self):"},{"line_number":99,"context_line":"        if self.version is V3:"},{"line_number":100,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":101,"context_line":"        return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_3a08a47f","line":100,"in_reply_to":"baada198_3a6a64b5","updated":"2014-07-25 04:38:16.000000000","message":"same as above","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e01b588a71ab53b4d6b07cc4428fd6b9bd2241d9","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def domain_name(self):"},{"line_number":99,"context_line":"        if self.version is V3:"},{"line_number":100,"context_line":"            return self.get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":101,"context_line":"        return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_3a6a64b5","line":100,"in_reply_to":"baada198_f711e5af","updated":"2014-07-25 04:01:27.000000000","message":"What if this is a project scoped token?","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    @property"},{"line_number":104,"context_line":"    def project_id(self):"},{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_570d318e","line":106,"updated":"2014-07-25 03:54:25.000000000","message":"[\u0027id\u0027]","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e01b588a71ab53b4d6b07cc4428fd6b9bd2241d9","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    @property"},{"line_number":104,"context_line":"    def project_id(self):"},{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7a405c35","line":106,"in_reply_to":"baada198_570d318e","updated":"2014-07-25 04:01:27.000000000","message":"What if this is a domain scoped token, or a unscoped token?","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    @property"},{"line_number":104,"context_line":"    def project_id(self):"},{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7a25bc08","line":106,"in_reply_to":"baada198_7a405c35","updated":"2014-07-25 04:38:16.000000000","message":"same as above","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @property"},{"line_number":111,"context_line":"    def project_name(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_171739a4","line":108,"updated":"2014-07-25 03:54:25.000000000","message":"[\u0027id\u0027] - there\u0027s more places where you shouldn\u0027t need to be defensive, i\u0027m going to stop pointing them out","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e01b588a71ab53b4d6b07cc4428fd6b9bd2241d9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @property"},{"line_number":111,"context_line":"    def project_name(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_ba46744e","line":108,"in_reply_to":"baada198_171739a4","updated":"2014-07-25 04:01:27.000000000","message":"Same as 106","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"91f1164acd8be521952a3a3897dcb52bcf69171c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if self.version is V3:"},{"line_number":106,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027id\u0027)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            return self[\u0027token\u0027].get(\u0027tenant\u0027, {}).get(\u0027id\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @property"},{"line_number":111,"context_line":"    def project_name(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9a2290ff","line":108,"in_reply_to":"baada198_ba46744e","updated":"2014-07-25 04:38:16.000000000","message":"same as above","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @property"},{"line_number":118,"context_line":"    def project_domain_id(self):"},{"line_number":119,"context_line":"        if self.version is V3:"},{"line_number":120,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027domain\u0027, {}).get(\u0027id\u0027)"},{"line_number":121,"context_line":"        return CONF.identity.default_domain_id"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b7edadba","line":120,"updated":"2014-07-25 03:54:25.000000000","message":"same as below - this is an issue in a few places","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"194bcbd3662d328b375282322115bee8e490ef70","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @property"},{"line_number":124,"context_line":"    def project_domain_name(self):"},{"line_number":125,"context_line":"        if self.version is V3:"},{"line_number":126,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":127,"context_line":"        return \u0027Default\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_97f42988","line":126,"updated":"2014-07-25 03:54:25.000000000","message":"if this is a domain-scoped token, i\u0027ll get back an empty dict instead of None or a string","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5f55c5d2c84e0374cedf7bb3a7b72b81b4c9bbb4","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @property"},{"line_number":124,"context_line":"    def project_domain_name(self):"},{"line_number":125,"context_line":"        if self.version is V3:"},{"line_number":126,"context_line":"            return self.get(\u0027project\u0027, {}).get(\u0027domain\u0027, {}).get(\u0027name\u0027)"},{"line_number":127,"context_line":"        return \u0027Default\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9a3d30be","line":126,"in_reply_to":"baada198_97f42988","updated":"2014-07-25 04:01:22.000000000","message":"nevermind, i made a lie!","commit_id":"1f502786bceadc7d54dee14f96e608968c864923"}],"keystone/tests/unit/token/test_token_model.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3df10ca452d9d5b45489a92f990ebe5940d15225","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.assertEqual("},{"line_number":86,"context_line":"            [r[\u0027name\u0027] for r in self.v3_sample_token[\u0027token\u0027][\u0027roles\u0027]],"},{"line_number":87,"context_line":"            token_data.role_names)"},{"line_number":88,"context_line":"        self.assertTrue(token_data.project_scoped)"},{"line_number":89,"context_line":"        token_data.pop(\u0027project\u0027)"},{"line_number":90,"context_line":"        self.assertFalse(token_data.project_scoped)"},{"line_number":91,"context_line":"        self.assertFalse(token_data.scoped)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_82ee851f","line":88,"updated":"2014-07-25 22:20:13.000000000","message":"we already asserted this in line 79","commit_id":"2e029f545e15325bac0cd2693b43ee07502502ed"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3df10ca452d9d5b45489a92f990ebe5940d15225","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                          \u0027domain_id\u0027)"},{"line_number":161,"context_line":"        self.assertRaises(NotImplementedError, getattr, token_data,"},{"line_number":162,"context_line":"                          \u0027domain_name\u0027)"},{"line_number":163,"context_line":"        self.assertFalse(token_data.domain_scoped)"},{"line_number":164,"context_line":"        token_data[\u0027domain\u0027] \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":165,"context_line":"                                \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":166,"context_line":"        self.assertRaises(NotImplementedError, getattr, token_data,"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_a2f38907","line":163,"updated":"2014-07-25 22:20:13.000000000","message":"we already asserted this on line 149","commit_id":"2e029f545e15325bac0cd2693b43ee07502502ed"}]}
