)]}'
{"keystone/catalog/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"# under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone import catalog"},{"line_number":19,"context_line":"from keystone.catalog import core"},{"line_number":20,"context_line":"from keystone.common import sql"},{"line_number":21,"context_line":"from keystone.common.sql import migration"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2Fc%3D","side":"PARENT","line":18,"updated":"2012-12-11 14:15:05.000000000","message":"interesting catch... two sides to this coin: A) it makes sense for modules internal to the catalog package to simply \u0027import core\u0027, if they want to do an explicit import; B) it sets a bad example for people wanting to write their own drivers (they should be doing from keystone import catalog and implementing catalog.Driver, not importing core and extending core.Driver).\n\nEither way, I\u0027m glad to have the redundant explicit import eliminated.","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"# under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone import catalog"},{"line_number":19,"context_line":"from keystone.catalog import core"},{"line_number":20,"context_line":"from keystone.common import sql"},{"line_number":21,"context_line":"from keystone.common.sql import migration"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F33w%3D","side":"PARENT","line":18,"in_reply_to":"AAAAMX%2F%2F3%2Fc%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        return self.apis.catalog.delete_endpoint(context, endpoint_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class VersionController(wsgi.Application):"},{"line_number":159,"context_line":"    def __init__(self, version_type):"},{"line_number":160,"context_line":"        self.catalog_api \u003d core.Manager()"},{"line_number":161,"context_line":"        self.url_key \u003d \u0027%sURL\u0027 % version_type"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2FE%3D","line":158,"updated":"2012-12-11 14:15:05.000000000","message":"not sure the version controller belongs here at all.. it\u0027s not specific to a backend, although it does consume catalog.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        return self.apis.catalog.delete_endpoint(context, endpoint_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class VersionController(wsgi.Application):"},{"line_number":159,"context_line":"    def __init__(self, version_type):"},{"line_number":160,"context_line":"        self.catalog_api \u003d core.Manager()"},{"line_number":161,"context_line":"        self.url_key \u003d \u0027%sURL\u0027 % version_type"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F33k%3D","line":158,"in_reply_to":"AAAAMX%2F%2F3%2FE%3D","updated":"2012-12-11 15:54:02.000000000","message":"Agreed. But I didn\u0027t feel like it warranted its own module.  It makes the argument perhaps that the controllers are more closely linked to the routers than the core elements, and perhaps routers and controllers should be in a package together instead of routers in on, and controllers and core in another.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return self.catalog_api.delete_endpoint(context, endpoint_id)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class VersionController(wsgi.Application):"},{"line_number":142,"context_line":"    def __init__(self, version_type):"},{"line_number":143,"context_line":"        self.catalog_api \u003d core.Manager()"},{"line_number":144,"context_line":"        self.url_key \u003d \u0027%sURL\u0027 % version_type"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzoQ%3D","line":141,"updated":"2012-12-14 21:08:09.000000000","message":"keystone.controllers?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return self.catalog_api.delete_endpoint(context, endpoint_id)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"class VersionController(wsgi.Application):"},{"line_number":142,"context_line":"    def __init__(self, version_type):"},{"line_number":143,"context_line":"        self.catalog_api \u003d core.Manager()"},{"line_number":144,"context_line":"        self.url_key \u003d \u0027%sURL\u0027 % version_type"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzhs%3D","line":141,"in_reply_to":"AAAAMX%2F%2FzoQ%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/catalog/routers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import wsgi"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VersionRouter(wsgi.ComposableRouter):"},{"line_number":22,"context_line":"    def __init__(self, description):"},{"line_number":23,"context_line":"        self.description \u003d description"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzoE%3D","line":21,"updated":"2012-12-14 21:08:09.000000000","message":"these really don\u0027t belong here :(","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import wsgi"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VersionRouter(wsgi.ComposableRouter):"},{"line_number":22,"context_line":"    def __init__(self, description):"},{"line_number":23,"context_line":"        self.description \u003d description"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzgc%3D","line":21,"in_reply_to":"AAAAMX%2F%2FzoE%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                       action\u003d\u0027get_versions\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def V3_routers(mapper, routers, apis):"},{"line_number":44,"context_line":"    routers.append(crud.Router(controllers.ServiceV3(**apis),"},{"line_number":45,"context_line":"                               \u0027services\u0027, \u0027service\u0027))"},{"line_number":46,"context_line":"    routers.append(crud.Router(controllers.EndpointV3(**apis),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzoA%3D","line":43,"updated":"2012-12-14 21:08:09.000000000","message":"append_v3_routers?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                       action\u003d\u0027get_versions\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def V3_routers(mapper, routers, apis):"},{"line_number":44,"context_line":"    routers.append(crud.Router(controllers.ServiceV3(**apis),"},{"line_number":45,"context_line":"                               \u0027services\u0027, \u0027service\u0027))"},{"line_number":46,"context_line":"    routers.append(crud.Router(controllers.EndpointV3(**apis),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzW0%3D","line":43,"in_reply_to":"AAAAMX%2F%2FzoA%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/common/controller.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class APIs():"},{"line_number":17,"context_line":"    def __init__(self):"},{"line_number":18,"context_line":"        self.identity \u003d identity.Manager()"},{"line_number":19,"context_line":"        self.policy \u003d policy.Manager()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2FU%3D","line":16,"updated":"2012-12-11 14:15:05.000000000","message":"extend object","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":13,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class APIs():"},{"line_number":17,"context_line":"    def __init__(self):"},{"line_number":18,"context_line":"        self.identity \u003d identity.Manager()"},{"line_number":19,"context_line":"        self.policy \u003d policy.Manager()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F33g%3D","line":16,"in_reply_to":"AAAAMX%2F%2F3%2FU%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    \"\"\"Base controller class for Identity API v3.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __init__(self):"},{"line_number":74,"context_line":"        self.apis \u003d APIs()"},{"line_number":75,"context_line":"        super(V3Controller, self).__init__()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _paginate(self, context, refs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2FM%3D","line":74,"updated":"2012-12-11 14:15:05.000000000","message":"I\u0027m curious as to why you want to break this out into it\u0027s own object? Are you using the \u0027APIs\u0027 class anywhere else?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    \"\"\"Base controller class for Identity API v3.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __init__(self):"},{"line_number":74,"context_line":"        self.apis \u003d APIs()"},{"line_number":75,"context_line":"        super(V3Controller, self).__init__()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _paginate(self, context, refs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F33Y%3D","line":74,"in_reply_to":"AAAAMX%2F%2F3%2FM%3D","updated":"2012-12-11 15:54:02.000000000","message":"No, this was more a vestige of the refactoring, and can be reversed.  I did feel it was slightly better self documenting this way:  contrast\n\nself.identity_api\n\nwith \n\nself.api.identity\n\nIt did make it easier to migrate the responsibility for building the set of APIs around, as it was originally done in service.py.  For a while, until I figured how I was triggereing the to the circular depenedency, I was building these in the individual controllers as well.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/common/crud.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzn8%3D","line":1,"updated":"2012-12-14 21:08:09.000000000","message":"keystone.common.routers?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/common/router.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"bf76a890d69e2a690911159d8c51e0af049b5a9b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone import config"},{"line_number":17,"context_line":"from keystone.common import wsgi"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Router(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2F%2Fe0%3D","line":17,"updated":"2012-12-17 15:22:30.000000000","message":"import order","commit_id":"c85023caacf3de1f3e80c009695716804e91ba13"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"af6f514982b8e67599b75f1a8192ebc22ac57600","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone import config"},{"line_number":17,"context_line":"from keystone.common import wsgi"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Router(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAM3%2F%2F%2FPY%3D","line":17,"in_reply_to":"AAAAM3%2F%2F%2Fe0%3D","updated":"2012-12-17 18:38:26.000000000","message":"Java beautification tools format the import orders nicely. I wonder if there are any on the Python side.","commit_id":"c85023caacf3de1f3e80c009695716804e91ba13"}],"keystone/contrib/admin_crud/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone.common import wsgi"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone import catalog"},{"line_number":19,"context_line":"from keystone import identity"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzn4%3D","line":16,"updated":"2012-12-14 21:08:09.000000000","message":"previous import order was correct (common comes after catalog)","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone.common import wsgi"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone import catalog"},{"line_number":19,"context_line":"from keystone import identity"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzWY%3D","line":16,"in_reply_to":"AAAAMX%2F%2Fzn4%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/contrib/ec2/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"from keystone import identity"},{"line_number":46,"context_line":"from keystone import policy"},{"line_number":47,"context_line":"from keystone import token"},{"line_number":48,"context_line":"from keystone.token import controllers as token_controllers"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2FA%3D","line":48,"updated":"2012-12-11 14:15:05.000000000","message":"I really don\u0027t understand why you want to use this pattern? It\u0027s redundant with \u0027from keystone import token\u0027 if you just leave \u0027keystone.token.controllers\u0027 in the \u0027token\u0027 namespace. I don\u0027t understand what it buys you other than more time spent fussing over import management.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":45,"context_line":"from keystone import identity"},{"line_number":46,"context_line":"from keystone import policy"},{"line_number":47,"context_line":"from keystone import token"},{"line_number":48,"context_line":"from keystone.token import controllers as token_controllers"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F33U%3D","line":48,"in_reply_to":"AAAAMX%2F%2F3%2FA%3D","updated":"2012-12-11 15:54:02.000000000","message":"I don\u0027t particularly like this pattern, but it seems to be a necessary evil.\n\nIf token.controllers is in the namespace, we have a circular dependency.  Core and controllers cannot be in the same namespace, because controllers need to point at multiple core files.  This is one of the few places where a file needs to talk to both a core and a controller file.\n\nWe might be able to change this to:\n\nfrom keystone.token import controllers as token, and then we can reference token.core that way.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        # TODO(termie): i don\u0027t think the ec2 middleware currently expects a"},{"line_number":195,"context_line":"        #               full return, but it contains a note saying that it"},{"line_number":196,"context_line":"        #               would be better to expect a full return"},{"line_number":197,"context_line":"        token_controller \u003d token_controllers.TokenController()"},{"line_number":198,"context_line":"        return token_controller._format_authenticate("},{"line_number":199,"context_line":"            token_ref, roles_ref, catalog_ref)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2Bw%3D","line":197,"updated":"2012-12-11 14:15:05.000000000","message":"token_controller \u003d token.controllers.Token()","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        # TODO(termie): i don\u0027t think the ec2 middleware currently expects a"},{"line_number":195,"context_line":"        #               full return, but it contains a note saying that it"},{"line_number":196,"context_line":"        #               would be better to expect a full return"},{"line_number":197,"context_line":"        token_controller \u003d token_controllers.TokenController()"},{"line_number":198,"context_line":"        return token_controller._format_authenticate("},{"line_number":199,"context_line":"            token_ref, roles_ref, catalog_ref)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F328%3D","line":197,"in_reply_to":"AAAAMX%2F%2F3%2Bw%3D","updated":"2012-12-11 15:54:02.000000000","message":"can\u0027t do that.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/contrib/user_crud/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.common import logging"},{"line_number":22,"context_line":"from keystone.common import wsgi"},{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":"from keystone.identity import controllers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystone.token import core as token"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2Bk%3D","line":24,"updated":"2012-12-11 14:15:05.000000000","message":"redundant import, and this makes it completely unclear what \u0027controllers\u0027 you\u0027re referring to.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone.common import wsgi"},{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":"from keystone.identity import controllers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystone.token import core as token"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2Bs%3D","line":25,"updated":"2012-12-11 14:15:05.000000000","message":"unnecessary line break","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":"from keystone.identity import controllers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystone.token import core as token"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2Bg%3D","line":26,"updated":"2012-12-11 14:15:05.000000000","message":"core is NOT meant to be consumed externally\n\n\u0027from keystone import token\u0027 should get you the same reference","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from keystone import identity"},{"line_number":24,"context_line":"from keystone.identity import controllers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystone.token import core as token"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32g%3D","line":26,"in_reply_to":"AAAAMX%2F%2F3%2Bg%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done. Thought I got all of these.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self.identity_api \u003d identity.Manager()"},{"line_number":35,"context_line":"        self.token_api \u003d token.Manager()"},{"line_number":36,"context_line":"        self.user_controller \u003d controllers.User()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def set_user_password(self, context, user_id, user):"},{"line_number":39,"context_line":"        token_id \u003d context.get(\u0027token_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2BY%3D","line":36,"updated":"2012-12-11 14:15:05.000000000","message":"as mentioned above, where is \u0027controllers\u0027 coming from","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    identity_api\u003didentity.Manager(),"},{"line_number":37,"context_line":"                    policy_api\u003dpolicy.Manager(),"},{"line_number":38,"context_line":"                    token_api\u003dtoken.Manager())"},{"line_number":39,"context_line":"        self.user_controller \u003d identity.controllers.User(**apis)"},{"line_number":40,"context_line":"        super(UserController, self).__init__(**apis)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def set_user_password(self, context, user_id, user):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzns%3D","line":39,"updated":"2012-12-14 21:08:09.000000000","message":"maybe this class should extend identity.controlllers.User instead of maintaining a reference to it?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    identity_api\u003didentity.Manager(),"},{"line_number":37,"context_line":"                    policy_api\u003dpolicy.Manager(),"},{"line_number":38,"context_line":"                    token_api\u003dtoken.Manager())"},{"line_number":39,"context_line":"        self.user_controller \u003d identity.controllers.User(**apis)"},{"line_number":40,"context_line":"        super(UserController, self).__init__(**apis)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def set_user_password(self, context, user_id, user):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzWU%3D","line":39,"in_reply_to":"AAAAMX%2F%2Fzns%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        admin_context \u003d copy.copy(context)"},{"line_number":70,"context_line":"        admin_context[\u0027is_admin\u0027] \u003d True"},{"line_number":71,"context_line":"        self.user_controller.set_user_password(admin_context,"},{"line_number":72,"context_line":"                                               user_id,"},{"line_number":73,"context_line":"                                               update_dict)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzno%3D","line":71,"updated":"2012-12-14 21:08:09.000000000","message":"really surprised that this controller wants to call another controller rather than the driver","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/extensions.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import routes"},{"line_number":18,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F398%3D","line":15,"updated":"2012-12-11 14:15:05.000000000","message":"what makes /extensions special so as to deserve it\u0027s own module for everything? why doesn\u0027t this stuff belong with the version controller? both are API agnostic","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import routes"},{"line_number":18,"context_line":"from keystone.common import wsgi"},{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3%2BA%3D","line":17,"updated":"2012-12-11 14:15:05.000000000","message":"it\u0027s not clear if this is a local import or http://routes.readthedocs.org/en/latest/","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import routes"},{"line_number":18,"context_line":"from keystone.common import wsgi"},{"line_number":19,"context_line":"from keystone import exception"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32c%3D","line":17,"in_reply_to":"AAAAMX%2F%2F3%2BA%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone import exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ExtensionRouter(wsgi.ComposableRouter):"},{"line_number":22,"context_line":"    def __init__(self, is_admin\u003dTrue):"},{"line_number":23,"context_line":"        if is_admin:"},{"line_number":24,"context_line":"            self.controller \u003d AdminExtensionsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fznk%3D","line":21,"updated":"2012-12-14 21:08:09.000000000","message":"keystone.routers.Extensions","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone import exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ExtensionRouter(wsgi.ComposableRouter):"},{"line_number":22,"context_line":"    def __init__(self, is_admin\u003dTrue):"},{"line_number":23,"context_line":"        if is_admin:"},{"line_number":24,"context_line":"            self.controller \u003d AdminExtensionsController()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzPQ%3D","line":21,"in_reply_to":"AAAAMX%2F%2Fznk%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027]))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class ExtensionsController(wsgi.Application):"},{"line_number":41,"context_line":"    \"\"\"Base extensions controller to be extended by public and admin API\u0027s.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def __init__(self, extensions\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzng%3D","line":40,"updated":"2012-12-14 21:08:09.000000000","message":"this is not specific to an api or backend, so keystone.controllers makes the most sense","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027]))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class ExtensionsController(wsgi.Application):"},{"line_number":41,"context_line":"    \"\"\"Base extensions controller to be extended by public and admin API\u0027s.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def __init__(self, extensions\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzPM%3D","line":40,"in_reply_to":"AAAAMX%2F%2Fzng%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            raise exception.NotFound(target\u003dextension_alias)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class PublicExtensionsController(ExtensionsController):"},{"line_number":59,"context_line":"    pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fznc%3D","line":58,"updated":"2012-12-14 21:08:09.000000000","message":"keystone.controllers.PublicExtensions","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class AdminExtensionsController(ExtensionsController):"},{"line_number":63,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":64,"context_line":"        super(AdminExtensionsController, self).__init__(*args, **kwargs)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznY%3D","line":62,"updated":"2012-12-14 21:08:09.000000000","message":"keystone.controllers.AdminExtensions","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/identity/backends/ldap/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystone.common import utils"},{"line_number":27,"context_line":"from keystone import config"},{"line_number":28,"context_line":"from keystone import exception"},{"line_number":29,"context_line":"from keystone.identity import core as identity"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F394%3D","line":29,"updated":"2012-12-11 14:15:05.000000000","message":"?!","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystone.common import utils"},{"line_number":27,"context_line":"from keystone import config"},{"line_number":28,"context_line":"from keystone import exception"},{"line_number":29,"context_line":"from keystone.identity import core as identity"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32Q%3D","line":29,"in_reply_to":"AAAAMX%2F%2F394%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/identity/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self.identity_api \u003d core.Manager()"},{"line_number":163,"context_line":"        self.policy_api \u003d policy.Manager()"},{"line_number":164,"context_line":"        self.token_api \u003d token.Manager()"},{"line_number":165,"context_line":"        super(User, self).__init__()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def get_user(self, context, user_id):"},{"line_number":168,"context_line":"        self.assert_admin(context)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznU%3D","side":"PARENT","line":165,"updated":"2012-12-14 21:08:09.000000000","message":"all this deleting is awesome, btw :P","commit_id":"4e2be8a8880f03b1c6d1dc663d7259dbb45ddf67"}],"keystone/identity/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Main entry point into the Identity service.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import urllib"},{"line_number":20,"context_line":"import urlparse"},{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F39Y%3D","side":"PARENT","line":19,"updated":"2012-12-11 14:15:05.000000000","message":"my bad, nice catch","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Main entry point into the Identity service.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import urllib"},{"line_number":20,"context_line":"import urlparse"},{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32M%3D","side":"PARENT","line":19,"in_reply_to":"AAAAMX%2F%2F39Y%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"}],"keystone/identity/routers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.identity import controllers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Public(wsgi.ComposableRouter):"},{"line_number":24,"context_line":"    def add_routes(self, mapper):"},{"line_number":25,"context_line":"        tenant_controller \u003d controllers.Tenant()"},{"line_number":26,"context_line":"        mapper.connect(\u0027/tenants\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F39U%3D","side":"PARENT","line":23,"updated":"2012-12-11 14:15:05.000000000","message":"haven\u0027t seen where you moved this stuff to yet, but i find this surprising","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"WSGI Routers for the Identity service.\"\"\""},{"line_number":17,"context_line":"from keystone.common import wsgi"},{"line_number":18,"context_line":"from keystone.identity import controllers"},{"line_number":19,"context_line":"from keystone.common import crud"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Public(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznQ%3D","line":19,"updated":"2012-12-14 21:08:09.000000000","message":"from keystone.common import routers","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def V3_routers(mapper, routers, apis):"},{"line_number":72,"context_line":"    routers.append(crud.Router(controllers.DomainV3(**apis),"},{"line_number":73,"context_line":"                               \u0027domains\u0027,"},{"line_number":74,"context_line":"                               \u0027domain\u0027))"},{"line_number":75,"context_line":"    project_controller \u003d controllers.ProjectV3(**apis)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznM%3D","line":72,"updated":"2012-12-14 21:08:09.000000000","message":"routers.RouterV3 or routers.V3Router?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/policy/__init__.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.policy.core import *"},{"line_number":18,"context_line":"from keystone.policy import controllers"},{"line_number":19,"context_line":"from keystone.policy import routers"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznI%3D","line":19,"updated":"2012-12-14 21:08:09.000000000","message":"cool","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/policy/routers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone.policy import controllers"},{"line_number":17,"context_line":"from keystone.common import crud"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznA%3D","line":15,"updated":"2012-12-14 21:08:09.000000000","message":"module name doesn\u0027t make sense, considering this contains no routers","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"from keystone.policy import controllers"},{"line_number":17,"context_line":"from keystone.common import crud"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzO8%3D","line":15,"in_reply_to":"AAAAMX%2F%2FznA%3D","updated":"2012-12-16 03:57:04.000000000","message":"keeping it consistant with the other modules lets us iterate through and pull in the V3_routers method.  See the updated version..\n\n  We will likely end up with policy routes over time.","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone.common import crud"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def V3_routers(mapper, routers, apis):"},{"line_number":21,"context_line":"    policy_controller \u003d controllers.PolicyV3(**apis)"},{"line_number":22,"context_line":"    routers.append(crud.Router(policy_controller, \u0027policies\u0027, \u0027policy\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FznE%3D","line":20,"updated":"2012-12-14 21:08:09.000000000","message":"append_v3_routers","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/routers/__init__.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F39M%3D","line":1,"updated":"2012-12-11 14:15:05.000000000","message":"do we put copyrights on empty files?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32E%3D","line":1,"in_reply_to":"AAAAMX%2F%2F39M%3D","updated":"2012-12-11 15:54:02.000000000","message":"Wasn\u0027t origianlly sure if this was going to be empty.  Does it hurt to have it here?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/routers/catalog.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"import routes"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.catalog import controllers"},{"line_number":19,"context_line":"from keystone.routers import crud"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F39I%3D","line":16,"updated":"2012-12-11 14:15:05.000000000","message":"http://routes.readthedocs.org/en/latest/ ? is this even used here?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"import routes"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.catalog import controllers"},{"line_number":19,"context_line":"from keystone.routers import crud"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F32A%3D","line":16,"in_reply_to":"AAAAMX%2F%2F39I%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/routers/crud.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import routes"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from keystone import config"},{"line_number":4,"context_line":"from keystone.common import logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F388%3D","line":1,"updated":"2012-12-11 14:15:05.000000000","message":"still don\u0027t know what this is","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import routes"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from keystone import config"},{"line_number":4,"context_line":"from keystone.common import logging"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F31U%3D","line":1,"in_reply_to":"AAAAMX%2F%2F388%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"from keystone.common import wsgi"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"class Router(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F39A%3D","line":8,"updated":"2012-12-11 14:15:05.000000000","message":"unused","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":5,"context_line":"from keystone.common import wsgi"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"class Router(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F31Y%3D","line":8,"in_reply_to":"AAAAMX%2F%2F39A%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/routers/identity.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"WSGI Routers for the Identity service.\"\"\""},{"line_number":19,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F380%3D","line":16,"updated":"2012-12-11 14:15:05.000000000","message":"random whitespace","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\"WSGI Routers for the Identity service.\"\"\""},{"line_number":19,"context_line":"from keystone.common import wsgi"},{"line_number":20,"context_line":"from keystone.identity import controllers"},{"line_number":21,"context_line":"from keystone.routers import crud"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Public(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38s%3D","line":21,"updated":"2012-12-11 14:15:05.000000000","message":"crud is an odd module name","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\"WSGI Routers for the Identity service.\"\"\""},{"line_number":19,"context_line":"from keystone.common import wsgi"},{"line_number":20,"context_line":"from keystone.identity import controllers"},{"line_number":21,"context_line":"from keystone.routers import crud"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Public(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F31I%3D","line":21,"in_reply_to":"AAAAMX%2F%2F38s%3D","updated":"2012-12-11 15:54:02.000000000","message":"crud is an odd name, period.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027]))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def V3_routers(mapper, routers):"},{"line_number":66,"context_line":"    routers.append(crud.Router(controllers.DomainV3(),"},{"line_number":67,"context_line":"                               \u0027domains\u0027,"},{"line_number":68,"context_line":"                               \u0027domain\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38g%3D","line":65,"updated":"2012-12-11 14:15:05.000000000","message":"awful function name lol","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027]))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def V3_routers(mapper, routers):"},{"line_number":66,"context_line":"    routers.append(crud.Router(controllers.DomainV3(),"},{"line_number":67,"context_line":"                               \u0027domains\u0027,"},{"line_number":68,"context_line":"                               \u0027domain\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F31E%3D","line":65,"in_reply_to":"AAAAMX%2F%2F38g%3D","updated":"2012-12-11 15:54:02.000000000","message":"Yeah, who would come up with something like that?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/routers/token.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import routes"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import logging"},{"line_number":20,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38I%3D","line":17,"updated":"2012-12-11 14:15:05.000000000","message":"still don\u0027t know what this is","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import routes"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import logging"},{"line_number":20,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F304%3D","line":17,"in_reply_to":"AAAAMX%2F%2F38I%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.common import wsgi"},{"line_number":21,"context_line":"from keystone.token import controllers"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TokenRouter(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38U%3D","line":23,"updated":"2012-12-11 14:15:05.000000000","message":"unused","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone.common import wsgi"},{"line_number":21,"context_line":"from keystone.token import controllers"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TokenRouter(wsgi.ComposableRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F300%3D","line":23,"in_reply_to":"AAAAMX%2F%2F38U%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/service.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":"import routes"},{"line_number":19,"context_line":"import json"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import config"},{"line_number":22,"context_line":"from keystone import catalog"},{"line_number":23,"context_line":"from keystone.common import cms"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38E%3D","side":"PARENT","line":20,"updated":"2012-12-11 14:15:05.000000000","message":"restore whitespace","commit_id":"a800fae22c627e89a09ffc35b95dd072416da14a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from keystone.routers import catalog"},{"line_number":28,"context_line":"from keystone.routers import identity"},{"line_number":29,"context_line":"from keystone.routers import policy"},{"line_number":30,"context_line":"from keystone.routers import token"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F38A%3D","line":30,"updated":"2012-12-11 14:15:05.000000000","message":"this is a really ugly set of imports","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\"\"\""},{"line_number":36,"context_line":"only ComposingRouters in this file.  The routers for the submodules should be"},{"line_number":37,"context_line":"in the module specific router files"},{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class AdminRouter(wsgi.ComposingRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F378%3D","line":38,"updated":"2012-12-11 14:15:05.000000000","message":"is this supposed to be a module doc str? it\u0027s neither true nor pep257ish","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\"\"\""},{"line_number":36,"context_line":"only ComposingRouters in this file.  The routers for the submodules should be"},{"line_number":37,"context_line":"in the module specific router files"},{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class AdminRouter(wsgi.ComposingRouter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3zc%3D","line":38,"in_reply_to":"AAAAMX%2F%2F378%3D","updated":"2012-12-11 15:54:02.000000000","message":"Fixed the text to make it a little clearer.  This is A standard that I am trying to enforce moving forward.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from keystone import policy"},{"line_number":25,"context_line":"from keystone import token"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzmk%3D","side":"PARENT","line":27,"updated":"2012-12-14 21:08:09.000000000","message":"restore whitespace","commit_id":"4e2be8a8880f03b1c6d1dc663d7259dbb45ddf67"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystone import exception"},{"line_number":21,"context_line":"from keystone import extensions"},{"line_number":22,"context_line":"from keystone import policy"},{"line_number":23,"context_line":"from keystone import catalog"},{"line_number":24,"context_line":"from keystone import identity"},{"line_number":25,"context_line":"from keystone import policy"},{"line_number":26,"context_line":"from keystone import token"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzms%3D","line":23,"updated":"2012-12-14 21:08:09.000000000","message":"import order","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The routers for the submodules should be in the module specific router files"},{"line_number":34,"context_line":"for example, the Composable Router for identity belongs in"},{"line_number":35,"context_line":"keystone/identity/routers.py"},{"line_number":36,"context_line":"\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _apis():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2Fzmg%3D","line":36,"updated":"2012-12-14 21:08:09.000000000","message":"move this up to before the imports to make this the module docstr","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"keystone/token/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"External authentication is not applicable\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TokenController(wsgi.Application):"},{"line_number":41,"context_line":"    def __init__(self):"},{"line_number":42,"context_line":"        self.catalog_api \u003d catalog.Manager()"},{"line_number":43,"context_line":"        self.identity_api \u003d identity.Manager()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F37Y%3D","line":40,"updated":"2012-12-11 14:15:05.000000000","message":"Token?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"External authentication is not applicable\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TokenController(wsgi.Application):"},{"line_number":41,"context_line":"    def __init__(self):"},{"line_number":42,"context_line":"        self.catalog_api \u003d catalog.Manager()"},{"line_number":43,"context_line":"        self.identity_api \u003d identity.Manager()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3zE%3D","line":40,"in_reply_to":"AAAAMX%2F%2F37Y%3D","updated":"2012-12-11 15:54:02.000000000","message":"Moved over from service.py.  I\u0027m wondering if the token module should be better called the auth module, but I could see that being confusing as well.  Trusts or Delegation are also possible names.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.catalog_api \u003d catalog.Manager()"},{"line_number":43,"context_line":"        self.identity_api \u003d identity.Manager()"},{"line_number":44,"context_line":"        self.token_api \u003d token.Manager()"},{"line_number":45,"context_line":"        self.policy_api \u003d policy.Manager()"},{"line_number":46,"context_line":"        super(TokenController, self).__init__()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def ca_cert(self, context, auth\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F37I%3D","line":45,"updated":"2012-12-11 14:15:05.000000000","message":"I thought part of your goal was to somehow avoid this?","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.catalog_api \u003d catalog.Manager()"},{"line_number":43,"context_line":"        self.identity_api \u003d identity.Manager()"},{"line_number":44,"context_line":"        self.token_api \u003d token.Manager()"},{"line_number":45,"context_line":"        self.policy_api \u003d policy.Manager()"},{"line_number":46,"context_line":"        super(TokenController, self).__init__()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def ca_cert(self, context, auth\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3zQ%3D","line":45,"in_reply_to":"AAAAMX%2F%2F37I%3D","updated":"2012-12-11 15:54:02.000000000","message":"This is not V3.  This code moved over unchanged.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"keystone/token/routers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone.token import controllers"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TokenRouter(wsgi.ComposableRouter):"},{"line_number":21,"context_line":"    def __init__(self, apis):"},{"line_number":22,"context_line":"        self.apis \u003d apis"},{"line_number":23,"context_line":"        super(TokenRouter, self).__init__()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzmU%3D","line":20,"updated":"2012-12-14 21:08:09.000000000","message":"Token?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone.token import controllers"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TokenRouter(wsgi.ComposableRouter):"},{"line_number":21,"context_line":"    def __init__(self, apis):"},{"line_number":22,"context_line":"        self.apis \u003d apis"},{"line_number":23,"context_line":"        super(TokenRouter, self).__init__()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzPA%3D","line":20,"in_reply_to":"AAAAMX%2F%2FzmU%3D","updated":"2012-12-16 03:57:04.000000000","message":"Done","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class TokenRouter(wsgi.ComposableRouter):"},{"line_number":21,"context_line":"    def __init__(self, apis):"},{"line_number":22,"context_line":"        self.apis \u003d apis"},{"line_number":23,"context_line":"        super(TokenRouter, self).__init__()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def add_routes(self, mapper):"},{"line_number":26,"context_line":"        token_controller \u003d controllers.Auth(**self.apis)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzmQ%3D","line":23,"updated":"2012-12-14 21:08:09.000000000","message":"Token?","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a7f69ad2fa31f89eb317a7a8e3d4825b51d194ed","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        self.apis \u003d apis"},{"line_number":23,"context_line":"        super(TokenRouter, self).__init__()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def add_routes(self, mapper):"},{"line_number":26,"context_line":"        token_controller \u003d controllers.Auth(**self.apis)"},{"line_number":27,"context_line":"        mapper.connect(\u0027/tokens\u0027,"},{"line_number":28,"context_line":"                       controller\u003dtoken_controller,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzmI%3D","line":25,"updated":"2012-12-14 21:08:09.000000000","message":"could make apis an argument here instead","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"b3c9b3166f86122eb943b2d94ba5a058e46e4860","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        self.apis \u003d apis"},{"line_number":23,"context_line":"        super(TokenRouter, self).__init__()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def add_routes(self, mapper):"},{"line_number":26,"context_line":"        token_controller \u003d controllers.Auth(**self.apis)"},{"line_number":27,"context_line":"        mapper.connect(\u0027/tokens\u0027,"},{"line_number":28,"context_line":"                       controller\u003dtoken_controller,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2FzPE%3D","line":25,"in_reply_to":"AAAAMX%2F%2FzmI%3D","updated":"2012-12-16 03:57:04.000000000","message":"That would change the definision of add_routes, which is defined by ComposableRouter.","commit_id":"588901ed40226fdc8ff276721f9b09569a4c1fde"}],"tests/test_backend_kvs.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.catalog import core as catalog"},{"line_number":19,"context_line":"from keystone.catalog.backends import kvs as catalog_kvs"},{"line_number":20,"context_line":"from keystone import exception"},{"line_number":21,"context_line":"from keystone.identity.backends import kvs as identity_kvs"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F37E%3D","line":18,"updated":"2012-12-11 14:15:05.000000000","message":"restore","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.catalog import core as catalog"},{"line_number":19,"context_line":"from keystone.catalog.backends import kvs as catalog_kvs"},{"line_number":20,"context_line":"from keystone import exception"},{"line_number":21,"context_line":"from keystone.identity.backends import kvs as identity_kvs"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3y8%3D","line":18,"in_reply_to":"AAAAMX%2F%2F37E%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"tests/test_backend_templated.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.catalog import core as catalog"},{"line_number":20,"context_line":"from keystone.catalog.backends import templated as catalog_templated"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone import test"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F36s%3D","line":19,"updated":"2012-12-11 14:15:05.000000000","message":"restore","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.catalog import core as catalog"},{"line_number":20,"context_line":"from keystone.catalog.backends import templated as catalog_templated"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone import test"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3y4%3D","line":19,"in_reply_to":"AAAAMX%2F%2F36s%3D","updated":"2012-12-11 15:54:02.000000000","message":"Done","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}],"tests/test_service.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"252a15b4da74e5037b8e6a0202eb1a71f5b9a73d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(TokenControllerTest, self).setUp()"},{"line_number":57,"context_line":"        self.identity_api \u003d kvs_identity.Identity()"},{"line_number":58,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":59,"context_line":"        self.api \u003d controllers.TokenController()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assertEqualTokens(self, a, b):"},{"line_number":62,"context_line":"        \"\"\"Assert that two tokens are equal."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F36g%3D","line":59,"updated":"2012-12-11 14:15:05.000000000","message":"there are a lot of \u0027controllers\u0027; this should be namespaced","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5300a44707f2faf2e4d8ccf1fe5a9bf6efe6a661","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(TokenControllerTest, self).setUp()"},{"line_number":57,"context_line":"        self.identity_api \u003d kvs_identity.Identity()"},{"line_number":58,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":59,"context_line":"        self.api \u003d controllers.TokenController()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assertEqualTokens(self, a, b):"},{"line_number":62,"context_line":"        \"\"\"Assert that two tokens are equal."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F3y0%3D","line":59,"in_reply_to":"AAAAMX%2F%2F36g%3D","updated":"2012-12-11 15:54:02.000000000","message":"Agreed, but we need to work out how that should look.","commit_id":"c0967193c679b2dacbc0b94245d43f7882d4e5b2"}]}
