)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":703,"context_line":"# Options defined in keystone"},{"line_number":704,"context_line":"#"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"# Endpoint Policy backend driver (string value)"},{"line_number":707,"context_line":"#driver\u003dkeystone.contrib.endpoint_policy.backends.sql.EndpointPolicy"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"fa98f980_8d0f32e1","line":706,"updated":"2014-08-31 17:24:41.000000000","message":"regenerate the sample config.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":703,"context_line":"# Options defined in keystone"},{"line_number":704,"context_line":"#"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"# Endpoint Policy backend driver (string value)"},{"line_number":707,"context_line":"#driver\u003dkeystone.contrib.endpoint_policy.backends.sql.EndpointPolicy"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"fa98f980_49a7f74f","line":706,"in_reply_to":"fa98f980_8d0f32e1","updated":"2014-09-01 04:30:55.000000000","message":"Done (in patch for controller)","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"}],"keystone/common/config.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f4386fb77618f898b0cf6381f0183807639ae052","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":459,"context_line":"                   default\u003d\u0027keystone.contrib.endpoint_policy.backends\u0027"},{"line_number":460,"context_line":"                           \u0027.sql.EndpointPolicy\u0027,"},{"line_number":461,"context_line":"                   help\u003d\u0027Endpoint Policy backend driver\u0027),"},{"line_number":462,"context_line":"    ],"},{"line_number":463,"context_line":"    \u0027stats\u0027: ["},{"line_number":464,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_52e8947c","line":461,"updated":"2014-08-30 17:30:16.000000000","message":"(nit) lowercase policy","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":459,"context_line":"                   default\u003d\u0027keystone.contrib.endpoint_policy.backends\u0027"},{"line_number":460,"context_line":"                           \u0027.sql.EndpointPolicy\u0027,"},{"line_number":461,"context_line":"                   help\u003d\u0027Endpoint Policy backend driver\u0027),"},{"line_number":462,"context_line":"    ],"},{"line_number":463,"context_line":"    \u0027stats\u0027: ["},{"line_number":464,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_7b5c9326","line":461,"in_reply_to":"fa98f980_52e8947c","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"}],"keystone/contrib/endpoint_policy/backends/sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    __tablename__ \u003d \u0027policy_association\u0027"},{"line_number":28,"context_line":"    attributes \u003d [\u0027policy_id\u0027, \u0027endpoint_id\u0027, \u0027region_id\u0027, \u0027service_id\u0027]"},{"line_number":29,"context_line":"    # The id column is never exposed outside this module. It only exists to"},{"line_number":30,"context_line":"    # provide a prime key, given that the real columns we would like to use"},{"line_number":31,"context_line":"    # (endpoint_id, service_id, region_id) can be null"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    policy_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_ce86f5da","line":30,"updated":"2014-08-21 17:46:50.000000000","message":"s/prime/primary?","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    __tablename__ \u003d \u0027policy_association\u0027"},{"line_number":28,"context_line":"    attributes \u003d [\u0027policy_id\u0027, \u0027endpoint_id\u0027, \u0027region_id\u0027, \u0027service_id\u0027]"},{"line_number":29,"context_line":"    # The id column is never exposed outside this module. It only exists to"},{"line_number":30,"context_line":"    # provide a prime key, given that the real columns we would like to use"},{"line_number":31,"context_line":"    # (endpoint_id, service_id, region_id) can be null"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    policy_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_d953d3e0","line":30,"in_reply_to":"1abeadc6_ce86f5da","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@dependency.requires(\u0027policy_api\u0027)"},{"line_number":54,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":55,"context_line":"class EndpointPolicy(object):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_ce5d157b","line":54,"updated":"2014-08-21 17:46:50.000000000","message":"you can do @dependency.requires(\u0027catalog_api\u0027, \u0027policy_api\u0027)","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@dependency.requires(\u0027policy_api\u0027)"},{"line_number":54,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":55,"context_line":"class EndpointPolicy(object):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_f9508fd6","line":54,"in_reply_to":"1abeadc6_ce5d157b","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"23cb476d476f4258ebffa35e858a1527dca3eb4a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    # (endpoint_id, service_id, region_id) can be null"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    policy_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":34,"context_line":"    endpoint_id \u003d sql.Column(sql.String(64))"},{"line_number":35,"context_line":"    service_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    region_id \u003d sql.Column(sql.String(64))"},{"line_number":37,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027endpoint_id\u0027, \u0027service_id\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_0de34534","line":34,"updated":"2014-08-25 04:26:14.000000000","message":"Set nullable to true for these, just to be safe.","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4f7a125d938e6b738814526f15c6761a9f656e4a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    # (endpoint_id, service_id, region_id) can be null"},{"line_number":32,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":33,"context_line":"    policy_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":34,"context_line":"    endpoint_id \u003d sql.Column(sql.String(64))"},{"line_number":35,"context_line":"    service_id \u003d sql.Column(sql.String(64))"},{"line_number":36,"context_line":"    region_id \u003d sql.Column(sql.String(64))"},{"line_number":37,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027endpoint_id\u0027, \u0027service_id\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_f0fdf93c","line":34,"in_reply_to":"1abeadc6_0de34534","updated":"2014-08-25 09:09:40.000000000","message":"Done","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4d5f9f2752480cd7fab7339789d8e197db2c2892","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        d \u003d {}"},{"line_number":48,"context_line":"        for attr in self.__class__.attributes:"},{"line_number":49,"context_line":"            d[attr] \u003d getattr(self, attr)"},{"line_number":50,"context_line":"        return d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_d0d6cf26","line":49,"updated":"2014-08-27 14:54:28.000000000","message":"i dont think this is actually needed","commit_id":"d1798c6161c72c9bdb5fbc8d8769bc150cae08e6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f9ebfe6acfac9faf4480949e8de7e7c4748a004a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\"Returns the model\u0027s attributes as a dictionary."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        We override the standard method in order to hide the id column,"},{"line_number":44,"context_line":"        since this only exists to provide the table with a prime key."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        d \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_47fc55b5","line":44,"updated":"2014-08-29 21:59:05.000000000","message":"(nit) primary","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d61c9ae7742ce99f29996731c3e8db3d3e7c411a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\"Returns the model\u0027s attributes as a dictionary."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        We override the standard method in order to hide the id column,"},{"line_number":44,"context_line":"        since this only exists to provide the table with a prime key."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        d \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_a03b45cf","line":44,"in_reply_to":"1abeadc6_47fc55b5","updated":"2014-08-30 15:35:37.000000000","message":"Done","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f9ebfe6acfac9faf4480949e8de7e7c4748a004a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027policy_api\u0027)"},{"line_number":54,"context_line":"class EndpointPolicy(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_87174da2","line":53,"updated":"2014-08-29 21:59:05.000000000","message":"this is a bad pattern - whatever requires this should be done at the manager layer","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"80cb3627cc8e573399ecf7cc324aff0c3610d78e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027policy_api\u0027)"},{"line_number":54,"context_line":"class EndpointPolicy(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_dbcd955e","line":53,"in_reply_to":"1abeadc6_87174da2","updated":"2014-08-30 08:21:29.000000000","message":"Ok, yep, I agree...the core crud methods are good here...it\u0027s the list processing ones that need to be lifted out...new patch on the way...","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f9ebfe6acfac9faf4480949e8de7e7c4748a004a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027policy_api\u0027)"},{"line_number":54,"context_line":"class EndpointPolicy(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"},{"line_number":57,"context_line":"        \"\"\"Assert that the association is supported."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        There are three types of association supported:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_a7336960","line":56,"updated":"2014-08-29 21:59:05.000000000","message":"the manager should do this work, not the driver.","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d61c9ae7742ce99f29996731c3e8db3d3e7c411a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027policy_api\u0027)"},{"line_number":54,"context_line":"class EndpointPolicy(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _assert_valid_association(self, endpoint_id, service_id, region_id):"},{"line_number":57,"context_line":"        \"\"\"Assert that the association is supported."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        There are three types of association supported:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_8021e99f","line":56,"in_reply_to":"1abeadc6_a7336960","updated":"2014-08-30 15:35:37.000000000","message":"Done","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f9ebfe6acfac9faf4480949e8de7e7c4748a004a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":89,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":90,"context_line":"                association \u003d query.one()"},{"line_number":91,"context_line":"                association.policy_id \u003d policy_id"},{"line_number":92,"context_line":"        except sql.NotFound:"},{"line_number":93,"context_line":"            with sql.transaction() as session:"},{"line_number":94,"context_line":"                association \u003d PolicyAssociation(id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_e7f9e180","line":91,"updated":"2014-08-29 21:59:05.000000000","message":"if you used a composite primary key across all three columns, you wouldn\u0027t have to do this :-/ ... as-is, this is open to a race condition","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"25e3fcf4f9155e70b0f744acfec8191beea25a20","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":89,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":90,"context_line":"                association \u003d query.one()"},{"line_number":91,"context_line":"                association.policy_id \u003d policy_id"},{"line_number":92,"context_line":"        except sql.NotFound:"},{"line_number":93,"context_line":"            with sql.transaction() as session:"},{"line_number":94,"context_line":"                association \u003d PolicyAssociation(id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_a79d290c","line":91,"in_reply_to":"1abeadc6_e7f9e180","updated":"2014-08-30 08:16:47.000000000","message":"So I tried that first.  Since these columns are nullable, this makes a composite PK much harder.","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f9ebfe6acfac9faf4480949e8de7e7c4748a004a","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def _get_endpoint(endpoint_id, policy_id):"},{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                return self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":132,"context_line":"            except exception.EndpointNotFound:"},{"line_number":133,"context_line":"                msg \u003d _(\u0027Endpoint %(endpoint_id)s referenced in \u0027"},{"line_number":134,"context_line":"                        \u0027association for policy %(policy_id)s not found.\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_274759bd","line":131,"updated":"2014-08-29 21:59:05.000000000","message":"drivers should not reach into other drivers -- do this work at the manager layer","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d61c9ae7742ce99f29996731c3e8db3d3e7c411a","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def _get_endpoint(endpoint_id, policy_id):"},{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                return self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":132,"context_line":"            except exception.EndpointNotFound:"},{"line_number":133,"context_line":"                msg \u003d _(\u0027Endpoint %(endpoint_id)s referenced in \u0027"},{"line_number":134,"context_line":"                        \u0027association for policy %(policy_id)s not found.\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_c03681e6","line":131,"in_reply_to":"1abeadc6_274759bd","updated":"2014-08-30 15:35:37.000000000","message":"Done","commit_id":"7618e1d701865831573383c0e914db9edda1d040"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            with sql.transaction() as session:"},{"line_number":56,"context_line":"                query \u003d session.query(PolicyAssociation)"},{"line_number":57,"context_line":"                query \u003d query.filter_by(endpoint_id\u003dendpoint_id)"},{"line_number":58,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":59,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_d5bd4e04","line":56,"updated":"2014-08-30 18:17:17.000000000","message":"what\u0027s the point of doing this query when the table has a unique constraint on it already? add a comment.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            with sql.transaction() as session:"},{"line_number":56,"context_line":"                query \u003d session.query(PolicyAssociation)"},{"line_number":57,"context_line":"                query \u003d query.filter_by(endpoint_id\u003dendpoint_id)"},{"line_number":58,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":59,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_8cd65bc4","line":56,"in_reply_to":"fa98f980_d5bd4e04","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":59,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":60,"context_line":"                association \u003d query.one()"},{"line_number":61,"context_line":"                association.policy_id \u003d policy_id"},{"line_number":62,"context_line":"        except sql.NotFound:"},{"line_number":63,"context_line":"            with sql.transaction() as session:"},{"line_number":64,"context_line":"                association \u003d PolicyAssociation(id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b5c0ca7d","line":61,"updated":"2014-08-30 18:17:17.000000000","message":"what is this line supposed to do?","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":59,"context_line":"                query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":60,"context_line":"                association \u003d query.one()"},{"line_number":61,"context_line":"                association.policy_id \u003d policy_id"},{"line_number":62,"context_line":"        except sql.NotFound:"},{"line_number":63,"context_line":"            with sql.transaction() as session:"},{"line_number":64,"context_line":"                association \u003d PolicyAssociation(id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_6cd137cd","line":61,"in_reply_to":"fa98f980_b5c0ca7d","updated":"2014-08-31 08:41:56.000000000","message":"it updates the row, no?  It certainly passes test_overwriting_policy_to_endpoint_association() in test_backend_endpoint_policy.py","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                                endpoint_id\u003dendpoint_id,"},{"line_number":67,"context_line":"                                                service_id\u003dservice_id,"},{"line_number":68,"context_line":"                                                region_id\u003dregion_id)"},{"line_number":69,"context_line":"                session.add(association)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def check_policy_association(self, policy_id, endpoint_id\u003dNone,"},{"line_number":72,"context_line":"                                 service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_1537d6b1","line":69,"updated":"2014-08-30 18:17:17.000000000","message":"these need to both be in the same transaction otherwise it\u0027s not going to work as expeted.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                                endpoint_id\u003dendpoint_id,"},{"line_number":67,"context_line":"                                                service_id\u003dservice_id,"},{"line_number":68,"context_line":"                                                region_id\u003dregion_id)"},{"line_number":69,"context_line":"                session.add(association)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def check_policy_association(self, policy_id, endpoint_id\u003dNone,"},{"line_number":72,"context_line":"                                 service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_acda3fe7","line":69,"in_reply_to":"fa98f980_1537d6b1","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            try:"},{"line_number":80,"context_line":"                query.one()"},{"line_number":81,"context_line":"            except sql.NotFound:"},{"line_number":82,"context_line":"                raise exception.NotFound(_(\u0027Policy association Not Found\u0027))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def delete_policy_association(self, policy_id, endpoint_id\u003dNone,"},{"line_number":85,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b5d9aa85","line":82,"updated":"2014-08-30 18:17:17.000000000","message":"There should be a PolicyNotFound like we have all the other NotFounds.\n\nthe docstring for this method says it raises keystone.exception.InvalidPolicyAssociation. Also, the docstring doesn\u0027t say that it raises NotFound.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            try:"},{"line_number":80,"context_line":"                query.one()"},{"line_number":81,"context_line":"            except sql.NotFound:"},{"line_number":82,"context_line":"                raise exception.NotFound(_(\u0027Policy association Not Found\u0027))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def delete_policy_association(self, policy_id, endpoint_id\u003dNone,"},{"line_number":85,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_fb8c0382","line":82,"in_reply_to":"fa98f980_b5d9aa85","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            query \u003d query.filter_by(endpoint_id\u003dendpoint_id)"},{"line_number":90,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":91,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":92,"context_line":"            query.delete()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_policy_association(self, endpoint_id\u003dNone,"},{"line_number":95,"context_line":"                               service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_155ef6e9","line":92,"updated":"2014-08-30 18:17:17.000000000","message":"the docstring for this method says it raises keystone.exception.InvalidPolicyAssociation.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            query \u003d query.filter_by(endpoint_id\u003dendpoint_id)"},{"line_number":90,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":91,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":92,"context_line":"            query.delete()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_policy_association(self, endpoint_id\u003dNone,"},{"line_number":95,"context_line":"                               service_id\u003dNone, region_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_1be9c71a","line":92,"in_reply_to":"fa98f980_155ef6e9","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2ac8a2d4b4f6a562822f13ecc5605f50f07d7a2c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":77,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                query.one()"},{"line_number":80,"context_line":"            except sql.NotFound:"},{"line_number":81,"context_line":"                raise exception.PolicyAssociationNotFound()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_0d81828f","line":79,"updated":"2014-08-31 18:29:42.000000000","message":"We should only select a specific value out here, saves the overhead of the object housekeeping. This can be done as a followup patch.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":77,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                query.one()"},{"line_number":80,"context_line":"            except sql.NotFound:"},{"line_number":81,"context_line":"                raise exception.PolicyAssociationNotFound()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_54bcee6c","line":79,"in_reply_to":"fa98f980_0d81828f","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2ac8a2d4b4f6a562822f13ecc5605f50f07d7a2c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":99,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":100,"context_line":"            try:"},{"line_number":101,"context_line":"                ref \u003d query.one()"},{"line_number":102,"context_line":"            except sql.NotFound:"},{"line_number":103,"context_line":"                raise exception.PolicyAssociationNotFound()"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_8d449275","line":101,"updated":"2014-08-31 18:29:42.000000000","message":"Same as above, we only care about the policy_id we should select that out and not do all the object house keeping.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            query \u003d query.filter_by(service_id\u003dservice_id)"},{"line_number":99,"context_line":"            query \u003d query.filter_by(region_id\u003dregion_id)"},{"line_number":100,"context_line":"            try:"},{"line_number":101,"context_line":"                ref \u003d query.one()"},{"line_number":102,"context_line":"            except sql.NotFound:"},{"line_number":103,"context_line":"                raise exception.PolicyAssociationNotFound()"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_74c1f2e3","line":101,"in_reply_to":"fa98f980_8d449275","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"}],"keystone/contrib/endpoint_policy/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        :returns: None"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        raise exception.NotImplemented()"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @abc.abstractmethod"},{"line_number":163,"context_line":"    def delete_association_by_service(self, service_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_8ec31dec","line":160,"updated":"2014-08-21 17:46:50.000000000","message":"missing pragma: no cover here","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        :returns: None"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        raise exception.NotImplemented()"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @abc.abstractmethod"},{"line_number":163,"context_line":"    def delete_association_by_service(self, service_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_396207ae","line":160,"in_reply_to":"1abeadc6_8ec31dec","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        :returns: None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        raise exception.NotImplemented()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @abc.abstractmethod"},{"line_number":174,"context_line":"    def delete_association_by_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_eeb1f18f","line":171,"updated":"2014-08-21 17:46:50.000000000","message":"missing pragma: no cover here","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        :returns: None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        raise exception.NotImplemented()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @abc.abstractmethod"},{"line_number":174,"context_line":"    def delete_association_by_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_5957c3ca","line":171,"in_reply_to":"1abeadc6_eeb1f18f","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        :returns: None"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        raise exception.NotImplemented()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @abc.abstractmethod"},{"line_number":185,"context_line":"    def delete_association_by_policy(self, policy_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_0eaf0d2b","line":182,"updated":"2014-08-21 17:46:50.000000000","message":"missing pragma: no cover here","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        :returns: None"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        raise exception.NotImplemented()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @abc.abstractmethod"},{"line_number":185,"context_line":"    def delete_association_by_policy(self, policy_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_795c7fee","line":182,"in_reply_to":"1abeadc6_0eaf0d2b","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f164a894574b39cbecd9cfabc6a869e07acd2bba","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        :returns: None"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_4ea58545","line":193,"updated":"2014-08-21 17:46:50.000000000","message":"missing pragma: no cover here","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6af33e7bb24518c12344fba9196ccd4dd82fe5a4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        :returns: None"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_99707b75","line":193,"in_reply_to":"1abeadc6_4ea58545","updated":"2014-08-24 22:43:52.000000000","message":"Done","commit_id":"54efe62adc9846c1018e98cdc781fecf520719bc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"23cb476d476f4258ebffa35e858a1527dca3eb4a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"},{"line_number":67,"context_line":"        \"\"\"Creates a policy association."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :param policy: identity of policy that is being associated"},{"line_number":70,"context_line":"        :type policy: string"},{"line_number":71,"context_line":"        :param endpoint_id: identity of endpoint to associate"},{"line_number":72,"context_line":"        :type endpoint_id: string"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_cdaa2dd2","line":69,"updated":"2014-08-25 04:26:14.000000000","message":"policy_id not policy \n\nSame for all the doc strings","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4f7a125d938e6b738814526f15c6761a9f656e4a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                  service_id\u003dNone, region_id\u003dNone):"},{"line_number":67,"context_line":"        \"\"\"Creates a policy association."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :param policy: identity of policy that is being associated"},{"line_number":70,"context_line":"        :type policy: string"},{"line_number":71,"context_line":"        :param endpoint_id: identity of endpoint to associate"},{"line_number":72,"context_line":"        :type endpoint_id: string"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_5094ede7","line":69,"in_reply_to":"1abeadc6_cdaa2dd2","updated":"2014-08-25 09:09:40.000000000","message":"Done","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f4386fb77618f898b0cf6381f0183807639ae052","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    \u0027identity-api-v3-os-endpoint-policy-ext.md\u0027,"},{"line_number":44,"context_line":"        }"},{"line_number":45,"context_line":"    ]}"},{"line_number":46,"context_line":"extension.register_admin_extension(extension_data[\u0027alias\u0027], extension_data)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@dependency.provider(\u0027endpoint_policy_api\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_92883cc8","line":46,"updated":"2014-08-30 17:30:16.000000000","message":"get rid of this it doesn\u0027t do anything.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    \u0027identity-api-v3-os-endpoint-policy-ext.md\u0027,"},{"line_number":44,"context_line":"        }"},{"line_number":45,"context_line":"    ]}"},{"line_number":46,"context_line":"extension.register_admin_extension(extension_data[\u0027alias\u0027], extension_data)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@dependency.provider(\u0027endpoint_policy_api\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_3bee8b23","line":46,"in_reply_to":"fa98f980_92883cc8","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                return self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":109,"context_line":"            except exception.EndpointNotFound:"},{"line_number":110,"context_line":"                msg \u003d _(\u0027Endpoint %(endpoint_id)s referenced in \u0027"},{"line_number":111,"context_line":"                        \u0027association for policy %(policy_id)s not found.\u0027)"},{"line_number":112,"context_line":"                LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"},{"line_number":113,"context_line":"                                  \u0027endpoint_id\u0027: endpoint_id})"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_526df403","line":110,"updated":"2014-08-30 18:17:17.000000000","message":"use _LW","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                return self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":109,"context_line":"            except exception.EndpointNotFound:"},{"line_number":110,"context_line":"                msg \u003d _(\u0027Endpoint %(endpoint_id)s referenced in \u0027"},{"line_number":111,"context_line":"                        \u0027association for policy %(policy_id)s not found.\u0027)"},{"line_number":112,"context_line":"                LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"},{"line_number":113,"context_line":"                                  \u0027endpoint_id\u0027: endpoint_id})"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_cc92239f","line":110,"in_reply_to":"fa98f980_526df403","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                \"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"                if region_id in regions_examined:"},{"line_number":148,"context_line":"                    msg \u003d _(\u0027Circular reference or a repeated entry found in \u0027"},{"line_number":149,"context_line":"                            \u0027region tree - %(region_id)s.\u0027)"},{"line_number":150,"context_line":"                    LOG.error(msg, {\u0027region_id\u0027: ref.region_id})"},{"line_number":151,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_f27d08b3","line":148,"updated":"2014-08-30 18:17:17.000000000","message":"use _LE","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                \"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"                if region_id in regions_examined:"},{"line_number":148,"context_line":"                    msg \u003d _(\u0027Circular reference or a repeated entry found in \u0027"},{"line_number":149,"context_line":"                            \u0027region tree - %(region_id)s.\u0027)"},{"line_number":150,"context_line":"                    LOG.error(msg, {\u0027region_id\u0027: ref.region_id})"},{"line_number":151,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_0ce42b3a","line":148,"in_reply_to":"fa98f980_f27d08b3","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                        endpoints, regions))"},{"line_number":196,"context_line":"                continue"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            msg \u003d _(\u0027Unsupported policy association found - \u0027"},{"line_number":199,"context_line":"                    \u0027Policy %(policy_id)s, Endpoint %(endpoint_id)s, \u0027"},{"line_number":200,"context_line":"                    \u0027Service %(service_id)s, Region %(region_id)s, \u0027)"},{"line_number":201,"context_line":"            LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_d2572425","line":198,"updated":"2014-08-30 18:17:17.000000000","message":"use _LW","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                        endpoints, regions))"},{"line_number":196,"context_line":"                continue"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            msg \u003d _(\u0027Unsupported policy association found - \u0027"},{"line_number":199,"context_line":"                    \u0027Policy %(policy_id)s, Endpoint %(endpoint_id)s, \u0027"},{"line_number":200,"context_line":"                    \u0027Service %(service_id)s, Region %(region_id)s, \u0027)"},{"line_number":201,"context_line":"            LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_2cd00f53","line":198,"in_reply_to":"fa98f980_d2572425","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            try:"},{"line_number":212,"context_line":"                return self.policy_api.get_policy(policy_id)"},{"line_number":213,"context_line":"            except exception.PolicyNotFound:"},{"line_number":214,"context_line":"                msg \u003d _(\u0027Policy %(policy_id)s referenced in \u0027"},{"line_number":215,"context_line":"                        \u0027association for endpoint %(endpoint_id)s not found.\u0027)"},{"line_number":216,"context_line":"                LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"},{"line_number":217,"context_line":"                                  \u0027endpoint_id\u0027: endpoint_id})"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_f2542823","line":214,"updated":"2014-08-30 18:17:17.000000000","message":"use _LW","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            try:"},{"line_number":212,"context_line":"                return self.policy_api.get_policy(policy_id)"},{"line_number":213,"context_line":"            except exception.PolicyNotFound:"},{"line_number":214,"context_line":"                msg \u003d _(\u0027Policy %(policy_id)s referenced in \u0027"},{"line_number":215,"context_line":"                        \u0027association for endpoint %(endpoint_id)s not found.\u0027)"},{"line_number":216,"context_line":"                LOG.warning(msg, {\u0027policy_id\u0027: policy_id,"},{"line_number":217,"context_line":"                                  \u0027endpoint_id\u0027: endpoint_id})"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_4cd55342","line":214,"in_reply_to":"fa98f980_f2542823","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        endpoint \u003d self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":233,"context_line":"        if endpoint.get(\u0027region_id\u0027) is not None:"},{"line_number":234,"context_line":"            next_region_id \u003d endpoint[\u0027region_id\u0027]"},{"line_number":235,"context_line":"            regions_examined \u003d []"},{"line_number":236,"context_line":"            while next_region_id is not None:"},{"line_number":237,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_15ffd602","line":234,"updated":"2014-08-30 18:17:17.000000000","message":"this would be more readable if it was put into a function.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        endpoint \u003d self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":233,"context_line":"        if endpoint.get(\u0027region_id\u0027) is not None:"},{"line_number":234,"context_line":"            next_region_id \u003d endpoint[\u0027region_id\u0027]"},{"line_number":235,"context_line":"            regions_examined \u003d []"},{"line_number":236,"context_line":"            while next_region_id is not None:"},{"line_number":237,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ac3ebf27","line":234,"in_reply_to":"fa98f980_15ffd602","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                except exception.NotFound:"},{"line_number":243,"context_line":"                    pass"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"                # There wasn\u0027t one for that region  \u0026 service, let\u0027s"},{"line_number":246,"context_line":"                # chase up the region tree"},{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_9512e656","line":245,"updated":"2014-08-30 18:17:17.000000000","message":"there\u0027s an extra space after \"region\"","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                except exception.NotFound:"},{"line_number":243,"context_line":"                    pass"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"                # There wasn\u0027t one for that region  \u0026 service, let\u0027s"},{"line_number":246,"context_line":"                # chase up the region tree"},{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ccca236e","line":245,"in_reply_to":"fa98f980_9512e656","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                # chase up the region tree"},{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"},{"line_number":249,"context_line":"                next_region_id \u003d None"},{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_f519727a","line":249,"updated":"2014-08-30 18:17:17.000000000","message":"looks like this is trying to break out of the loop if there\u0027s no parent_region_id. No need to be sneaky here, just break if there\u0027s no parent_region_id:\n\n  parent_region_id \u003d region.get(\u0027parent_region_id\u0027)\n  if parent_region_id is None:\n     break","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                # chase up the region tree"},{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"},{"line_number":249,"context_line":"                next_region_id \u003d None"},{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_4cbf13d1","line":249,"in_reply_to":"fa98f980_f519727a","updated":"2014-08-31 08:41:56.000000000","message":"I agree we could do that....and use an infinite loop, which you can only get out of via the break.  I think this might be personal taste...I guess I prefer to give the reader a clue at the top of the loop what the usual break condition is.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"},{"line_number":249,"context_line":"                next_region_id \u003d None"},{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"},{"line_number":253,"context_line":"                        msg \u003d _(\u0027Circular reference or a repeated entry found \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_3236b004","line":250,"updated":"2014-08-30 18:17:17.000000000","message":"remove \", None\" since that\u0027s the default.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                regions_examined.append(next_region_id)"},{"line_number":248,"context_line":"                region \u003d self.catalog_api.get_region(next_region_id)"},{"line_number":249,"context_line":"                next_region_id \u003d None"},{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"},{"line_number":253,"context_line":"                        msg \u003d _(\u0027Circular reference or a repeated entry found \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_6c5857fb","line":250,"in_reply_to":"fa98f980_3236b004","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"},{"line_number":253,"context_line":"                        msg \u003d _(\u0027Circular reference or a repeated entry found \u0027"},{"line_number":254,"context_line":"                                \u0027in region tree - %(region_id)s.\u0027)"},{"line_number":255,"context_line":"                        LOG.error(msg, {\u0027region_id\u0027: next_region_id})"},{"line_number":256,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_1231ac0b","line":253,"updated":"2014-08-30 18:17:17.000000000","message":"use _LE","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                if region.get(\u0027parent_region_id\u0027, None) is not None:"},{"line_number":251,"context_line":"                    next_region_id \u003d region[\u0027parent_region_id\u0027]"},{"line_number":252,"context_line":"                    if next_region_id in regions_examined:"},{"line_number":253,"context_line":"                        msg \u003d _(\u0027Circular reference or a repeated entry found \u0027"},{"line_number":254,"context_line":"                                \u0027in region tree - %(region_id)s.\u0027)"},{"line_number":255,"context_line":"                        LOG.error(msg, {\u0027region_id\u0027: next_region_id})"},{"line_number":256,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_4c6393b1","line":253,"in_reply_to":"fa98f980_1231ac0b","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        LOG.error(msg, {\u0027region_id\u0027: next_region_id})"},{"line_number":256,"context_line":"                        break"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # Finally, just check if there is one for the Service."},{"line_number":259,"context_line":"        try:"},{"line_number":260,"context_line":"            ref \u003d self.driver.get_policy_association("},{"line_number":261,"context_line":"                service_id\u003dendpoint[\u0027service_id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b5360ae6","line":258,"updated":"2014-08-30 18:17:17.000000000","message":"lowercase service","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                        LOG.error(msg, {\u0027region_id\u0027: next_region_id})"},{"line_number":256,"context_line":"                        break"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # Finally, just check if there is one for the Service."},{"line_number":259,"context_line":"        try:"},{"line_number":260,"context_line":"            ref \u003d self.driver.get_policy_association("},{"line_number":261,"context_line":"                service_id\u003dendpoint[\u0027service_id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_0c526bdd","line":258,"in_reply_to":"fa98f980_b5360ae6","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        except exception.NotFound:"},{"line_number":264,"context_line":"            pass"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        msg \u003d (_(\u0027No policy is associated with endpoint \u0027"},{"line_number":267,"context_line":"                 \u0027%(endpoint_id)s.\u0027) % {\u0027endpoint_id\u0027: endpoint_id})"},{"line_number":268,"context_line":"        raise exception.NotFound(msg)"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_752582aa","line":266,"updated":"2014-08-30 18:17:17.000000000","message":"the extra ( shouldn\u0027t be required here since there\u0027s already a (","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        except exception.NotFound:"},{"line_number":264,"context_line":"            pass"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        msg \u003d (_(\u0027No policy is associated with endpoint \u0027"},{"line_number":267,"context_line":"                 \u0027%(endpoint_id)s.\u0027) % {\u0027endpoint_id\u0027: endpoint_id})"},{"line_number":268,"context_line":"        raise exception.NotFound(msg)"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ecf1a796","line":266,"in_reply_to":"fa98f980_752582aa","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :type service_id: string"},{"line_number":311,"context_line":"        :param region_id: identity of the region to associate"},{"line_number":312,"context_line":"        :type region_id: string"},{"line_number":313,"context_line":"        :raises: keystone.exception.InvalidPolicyAssociation"},{"line_number":314,"context_line":"        :returns: None"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_f55172d9","line":313,"updated":"2014-08-30 18:17:17.000000000","message":"this should say under what condition the exception can be raised. (This comment applies to all the :raises:)","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :type service_id: string"},{"line_number":311,"context_line":"        :param region_id: identity of the region to associate"},{"line_number":312,"context_line":"        :type region_id: string"},{"line_number":313,"context_line":"        :raises: keystone.exception.InvalidPolicyAssociation"},{"line_number":314,"context_line":"        :returns: None"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_6c35b745","line":313,"in_reply_to":"fa98f980_f55172d9","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        :type service_id: string"},{"line_number":350,"context_line":"        :param region_id: identity of the region"},{"line_number":351,"context_line":"        :type region_id: string"},{"line_number":352,"context_line":"        :raises: keystone.exception.NotFound"},{"line_number":353,"context_line":"        :returns: dict containing policy_id"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b53d2abe","line":352,"updated":"2014-08-30 18:17:17.000000000","message":"PolicyNotFound ?","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        :type service_id: string"},{"line_number":350,"context_line":"        :param region_id: identity of the region"},{"line_number":351,"context_line":"        :type region_id: string"},{"line_number":352,"context_line":"        :raises: keystone.exception.NotFound"},{"line_number":353,"context_line":"        :returns: dict containing policy_id"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_2cdd6f15","line":352,"in_reply_to":"fa98f980_b53d2abe","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    @abc.abstractmethod"},{"line_number":397,"context_line":"    def delete_association_by_endpoint(self, endpoint_id):"},{"line_number":398,"context_line":"        \"\"\"Removes all the policy association with specific endpoint."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        :param endpoint_id: identity of endpoint to check"},{"line_number":401,"context_line":"        :type endpoint_id: string"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_3563fab2","line":398,"updated":"2014-08-30 18:17:17.000000000","message":"change \"association\" to \"associations\"\n\nchange \"with specific\" to \"with the specific\"","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    @abc.abstractmethod"},{"line_number":397,"context_line":"    def delete_association_by_endpoint(self, endpoint_id):"},{"line_number":398,"context_line":"        \"\"\"Removes all the policy association with specific endpoint."},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        :param endpoint_id: identity of endpoint to check"},{"line_number":401,"context_line":"        :type endpoint_id: string"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ecc36736","line":398,"in_reply_to":"fa98f980_3563fab2","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @abc.abstractmethod"},{"line_number":408,"context_line":"    def delete_association_by_service(self, service_id):"},{"line_number":409,"context_line":"        \"\"\"Removes all the policy association with specific service."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        :param service_id: identity of endpoint to check"},{"line_number":412,"context_line":"        :type service_id: string"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_35793a94","line":409,"updated":"2014-08-30 18:17:17.000000000","message":"change \"association\" to \"associations\"\n\nchange \"with specific\" to \"with the specific\" (add the)","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @abc.abstractmethod"},{"line_number":408,"context_line":"    def delete_association_by_service(self, service_id):"},{"line_number":409,"context_line":"        \"\"\"Removes all the policy association with specific service."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        :param service_id: identity of endpoint to check"},{"line_number":412,"context_line":"        :type service_id: string"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_0cc18b2e","line":409,"in_reply_to":"fa98f980_35793a94","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"extension_data \u003d {"},{"line_number":30,"context_line":"    \u0027name\u0027: \u0027OpenStack Keystone Endpoint Policy API\u0027,"},{"line_number":31,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":32,"context_line":"                 \u0027OS-ENDPOINT-POLICY/v1.0\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_0d5502c6","line":29,"updated":"2014-08-31 17:24:41.000000000","message":"remove this it\u0027s not used.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2ac8a2d4b4f6a562822f13ecc5605f50f07d7a2c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"extension_data \u003d {"},{"line_number":30,"context_line":"    \u0027name\u0027: \u0027OpenStack Keystone Endpoint Policy API\u0027,"},{"line_number":31,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":32,"context_line":"                 \u0027OS-ENDPOINT-POLICY/v1.0\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_cd5dba4a","line":29,"in_reply_to":"fa98f980_0d5502c6","updated":"2014-08-31 18:29:42.000000000","message":"++ Should be done in a followup patch.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"extension_data \u003d {"},{"line_number":30,"context_line":"    \u0027name\u0027: \u0027OpenStack Keystone Endpoint Policy API\u0027,"},{"line_number":31,"context_line":"    \u0027namespace\u0027: \u0027http://docs.openstack.org/identity/api/ext/\u0027"},{"line_number":32,"context_line":"                 \u0027OS-ENDPOINT-POLICY/v1.0\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f4ac0238","line":29,"in_reply_to":"fa98f980_cd5dba4a","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            the region tree to find one."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"            \"\"\""},{"line_number":226,"context_line":"            next_region_id \u003d endpoint[\u0027region_id\u0027]"},{"line_number":227,"context_line":"            regions_examined \u003d []"},{"line_number":228,"context_line":"            while next_region_id is not None:"},{"line_number":229,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_ede35e03","line":226,"updated":"2014-08-31 17:24:41.000000000","message":"can call this region_id. What\u0027s next about it?","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            the region tree to find one."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"            \"\"\""},{"line_number":226,"context_line":"            next_region_id \u003d endpoint[\u0027region_id\u0027]"},{"line_number":227,"context_line":"            regions_examined \u003d []"},{"line_number":228,"context_line":"            while next_region_id is not None:"},{"line_number":229,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_347e8aaf","line":226,"in_reply_to":"fa98f980_ede35e03","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        except exception.PolicyAssociationNotFound:"},{"line_number":257,"context_line":"            pass"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        # So there wasn\u0027t a policy explicitly defined for this endpoint, so"},{"line_number":260,"context_line":"        # now let\u0027s see if there is one for the Region \u0026 Service."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        endpoint \u003d self.catalog_api.get_endpoint(endpoint_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_edca7e6d","line":259,"updated":"2014-08-31 17:24:41.000000000","message":"Remove \"So\"","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        except exception.PolicyAssociationNotFound:"},{"line_number":257,"context_line":"            pass"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        # So there wasn\u0027t a policy explicitly defined for this endpoint, so"},{"line_number":260,"context_line":"        # now let\u0027s see if there is one for the Region \u0026 Service."},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        endpoint \u003d self.catalog_api.get_endpoint(endpoint_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_54630e1a","line":259,"in_reply_to":"fa98f980_edca7e6d","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        :type service_id: string"},{"line_number":319,"context_line":"        :param region_id: identity of the region to associate"},{"line_number":320,"context_line":"        :type region_id: string"},{"line_number":321,"context_line":"        :raises: keystone.exception.PolicyAssociationNotFound if the is no"},{"line_number":322,"context_line":"                 match for the specified association"},{"line_number":323,"context_line":"        :returns: None"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_cd713a79","line":321,"updated":"2014-08-31 17:24:41.000000000","message":"change \"the\" to \"there\"","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        :type service_id: string"},{"line_number":319,"context_line":"        :param region_id: identity of the region to associate"},{"line_number":320,"context_line":"        :type region_id: string"},{"line_number":321,"context_line":"        :raises: keystone.exception.PolicyAssociationNotFound if the is no"},{"line_number":322,"context_line":"                 match for the specified association"},{"line_number":323,"context_line":"        :returns: None"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f47322e5","line":321,"in_reply_to":"fa98f980_cd713a79","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        :type service_id: string"},{"line_number":358,"context_line":"        :param region_id: identity of the region"},{"line_number":359,"context_line":"        :type region_id: string"},{"line_number":360,"context_line":"        :raises: keystone.exception.PolicyAssociationNotFound if the is no"},{"line_number":361,"context_line":"                 match for the specified association"},{"line_number":362,"context_line":"        :returns: dict containing policy_id"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_ed6efe95","line":360,"updated":"2014-08-31 17:24:41.000000000","message":"change \"the\" to \"there\"","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        :type service_id: string"},{"line_number":358,"context_line":"        :param region_id: identity of the region"},{"line_number":359,"context_line":"        :type region_id: string"},{"line_number":360,"context_line":"        :raises: keystone.exception.PolicyAssociationNotFound if the is no"},{"line_number":361,"context_line":"                 match for the specified association"},{"line_number":362,"context_line":"        :returns: dict containing policy_id"},{"line_number":363,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_1481868f","line":360,"in_reply_to":"fa98f980_ed6efe95","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"}],"keystone/exception.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid policy Association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b2ac6037","line":214,"updated":"2014-08-30 18:17:17.000000000","message":"lowercase \"association\"","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid policy Association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_5ba50f03","line":214,"in_reply_to":"fa98f980_b2ac6037","updated":"2014-08-31 08:41:56.000000000","message":"Done","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e6100966f617c092798eb8270f116310b2ab59b5","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid policy Association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class NotFound(Error):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_d2a9e425","line":216,"updated":"2014-08-30 18:17:17.000000000","message":"somebody who gets this error is going to have no idea why their policy association is invalid.","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce23cc5de49aba4707bb9dd13117b32ecf32f4a5","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid policy Association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class NotFound(Error):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_bbab5bd5","line":216,"in_reply_to":"fa98f980_d2a9e425","updated":"2014-08-31 08:41:56.000000000","message":"Have improved message slightly","commit_id":"a1c4085b981936b0bb36303c58bd224a9fe2b67c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3b56e4958c5b5e9fc56aff5cb359287f91f0c2ca","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid mix of entities for policy association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class NotFound(Error):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_0d6c229c","line":216,"updated":"2014-08-31 17:24:41.000000000","message":"put what a valid mix would be in the message.","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2ac8a2d4b4f6a562822f13ecc5605f50f07d7a2c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid mix of entities for policy association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class NotFound(Error):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_8d12d260","line":216,"in_reply_to":"fa98f980_0d6c229c","updated":"2014-08-31 18:29:42.000000000","message":"++","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab6135011099e7f5edb166e06576788c0e7fd9db","unresolved":false,"context_lines":[{"line_number":213,"context_line":"class InvalidPolicyAssociation(Forbidden):"},{"line_number":214,"context_line":"    message_format \u003d _(\"Invalid mix of entities for policy association - \""},{"line_number":215,"context_line":"                       \"Endpoint: %(endpoint_id)s, Service: %(service_id)s, \""},{"line_number":216,"context_line":"                       \"Region: %(region_id)s\")"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class NotFound(Error):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_b440ba57","line":216,"in_reply_to":"fa98f980_8d12d260","updated":"2014-09-01 04:30:55.000000000","message":"Done","commit_id":"9f9911328b42fb279f39824916e21bff5a09d535"}],"keystone/tests/test_backend_endpoint_policy.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"23cb476d476f4258ebffa35e858a1527dca3eb4a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class PolicyAssociationTests(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        self.create_sample_data()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _assert_correct_policy(self, endpoint, policy):"},{"line_number":28,"context_line":"        ref \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_2dfe4106","line":25,"updated":"2014-08-25 04:26:14.000000000","message":"This should be done once, not after every test, refer to v3 federation tests, load sample data","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4f7a125d938e6b738814526f15c6761a9f656e4a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class PolicyAssociationTests(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        self.create_sample_data()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _assert_correct_policy(self, endpoint, policy):"},{"line_number":28,"context_line":"        ref \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_cb94d08e","line":25,"in_reply_to":"1abeadc6_2dfe4106","updated":"2014-08-25 09:09:40.000000000","message":"Done","commit_id":"f85617badca85ff59b9e475d191d8063ec9f1869"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e554bfb0e3fd83491534dd357b275c3a3226bca4","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class PolicyAssociationTests(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def _assert_correct_policy(self, endpoint, policy):"},{"line_number":25,"context_line":"        ref \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_8a51d2da","line":22,"updated":"2014-08-26 01:59:12.000000000","message":"nit: shouldn\u0027t this inherit from core.BaseTestCase?","commit_id":"9e07277a9baa6764d76cb5649ff53a9f5ae8da85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1557b23aa0f060b5a432dca858370d2fcd1a0355","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class PolicyAssociationTests(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def _assert_correct_policy(self, endpoint, policy):"},{"line_number":25,"context_line":"        ref \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_907000de","line":22,"in_reply_to":"1abeadc6_8a51d2da","updated":"2014-08-26 19:03:57.000000000","message":"It\u0027s done the way the backend/backend_sql tests are done...the actually testing is run from test_backend_endpoint_policy_sql.py","commit_id":"9e07277a9baa6764d76cb5649ff53a9f5ae8da85"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e554bfb0e3fd83491534dd357b275c3a3226bca4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        for endpoint in endpoints:"},{"line_number":35,"context_line":"            self.assertIn(endpoint[\u0027id\u0027], endpoint_id_list)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def load_sample_data(self):"},{"line_number":38,"context_line":"        \"\"\"Create sample data to test policy associations."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        The following data is created:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_aad20e32","line":37,"updated":"2014-08-26 01:59:12.000000000","message":"i\u0027m confused as to how this worked, considering this class doesn\u0027t inherit from anything.","commit_id":"9e07277a9baa6764d76cb5649ff53a9f5ae8da85"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1557b23aa0f060b5a432dca858370d2fcd1a0355","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        for endpoint in endpoints:"},{"line_number":35,"context_line":"            self.assertIn(endpoint[\u0027id\u0027], endpoint_id_list)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def load_sample_data(self):"},{"line_number":38,"context_line":"        \"\"\"Create sample data to test policy associations."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        The following data is created:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d058b859","line":37,"in_reply_to":"1abeadc6_aad20e32","updated":"2014-08-26 19:03:57.000000000","message":"the tests are run from test_backend_endpoint_policy_sql.py","commit_id":"9e07277a9baa6764d76cb5649ff53a9f5ae8da85"}]}
