)]}'
{"doc/source/architecture.rst":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a6d4424ac497933c7d1f125106ddd2d9c74ca68a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Assignment"},{"line_number":59,"context_line":"----------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The Assignment service provides data about Role assignment to the entities"},{"line_number":62,"context_line":"managed by the Identity and Resource services.  Again, like these two"},{"line_number":63,"context_line":"services, this data may either be managed directly by the Assignment service"},{"line_number":64,"context_line":"or be pulled from another authoritative backend service, such as LDAP."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_126ed301","line":61,"updated":"2014-11-11 23:46:34.000000000","message":"Assignments* ?","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d5d6f94cc8748060db63bd22c2d48967cfa8fa55","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Assignment"},{"line_number":59,"context_line":"----------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The Assignment service provides data about Role assignment to the entities"},{"line_number":62,"context_line":"managed by the Identity and Resource services.  Again, like these two"},{"line_number":63,"context_line":"services, this data may either be managed directly by the Assignment service"},{"line_number":64,"context_line":"or be pulled from another authoritative backend service, such as LDAP."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_ed2b2680","line":61,"in_reply_to":"5a890539_126ed301","updated":"2014-11-11 23:52:12.000000000","message":"...the style seems to be to keep them singular...so trying to stick to that...that\u0027s true for the first use of Assignment in this sentence, but the second one probably should be plural. Fixed.","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"de5cc7bc4b4a2f9783055889451fac1c80693213","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Assignment"},{"line_number":59,"context_line":"----------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The Assignment service provides data about Role assignment to the entities"},{"line_number":62,"context_line":"managed by the Identity and Resource services.  Again, like these two"},{"line_number":63,"context_line":"services, this data may either be managed directly by the Assignment service"},{"line_number":64,"context_line":"or be pulled from another authoritative backend service, such as LDAP."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_343016e8","line":61,"in_reply_to":"5a890539_ed0a46d1","updated":"2014-11-12 08:13:58.000000000","message":"Assignments service doesn\u0027t sounds right, suggest keeping it as-is","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a21b825a019ed03bc58980ce47c6ff7cfe662b05","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Assignment"},{"line_number":59,"context_line":"----------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"The Assignment service provides data about Role assignment to the entities"},{"line_number":62,"context_line":"managed by the Identity and Resource services.  Again, like these two"},{"line_number":63,"context_line":"services, this data may either be managed directly by the Assignment service"},{"line_number":64,"context_line":"or be pulled from another authoritative backend service, such as LDAP."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_ed0a46d1","line":61,"in_reply_to":"5a890539_ed2b2680","updated":"2014-11-12 00:02:24.000000000","message":"I imagined the contrary, bacause of \"Projects\", \"Domains\", \"Roles\", \"Tokens\"...","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"de5cc7bc4b4a2f9783055889451fac1c80693213","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Assignment"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.RoleV3`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_f40e8e31","line":111,"updated":"2014-11-12 08:13:58.000000000","message":"remove project and role?","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"da72ec25f4c00b3c86d0da589c5d72ee72754a5d","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Assignment"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.RoleV3`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_81c6c147","line":111,"in_reply_to":"5a890539_9389d6cc","updated":"2014-11-13 10:28:35.000000000","message":"updated with renamed controllers.","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"50b334f1ddb99d846bcf4c9e1686729a2e198074","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* Assignment"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.RoleV3`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_9389d6cc","line":111,"in_reply_to":"5a890539_f40e8e31","updated":"2014-11-12 14:08:25.000000000","message":"so we do still have controllers here...that hold the assignment APIs that are specific to Projects or Roles(really Grants)...the question, that has been raised by others, is whether we should rename these....I\u0027m kind of starting to think that we should....","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cee3420b85d30e9a5596f50ccea2893f71055460","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* Assignment"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":" * :mod:`keystone.assignment.controllers.GrantAssignmentV3`"},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"}],"source_content_type":"text/x-rst","patch_set":24,"id":"fa81d914_21ba5d6e","line":110,"updated":"2015-01-30 05:38:16.000000000","message":"whats the difference between a grant and an assignment?\n\nor are these just grants in the assignment backend?","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"33eddd37183cd788ab7ecf8124580941e9accc3e","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* Assignment"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":" * :mod:`keystone.assignment.controllers.GrantAssignmentV3`"},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"}],"source_content_type":"text/x-rst","patch_set":24,"id":"da86d52c_becd0d60","line":110,"in_reply_to":"fa81d914_21ba5d6e","updated":"2015-01-30 23:44:02.000000000","message":"So the assignment APIs have evolved over time.  In V3 we initially had the \"grant\" APIs (create_grant, list_grants etc.).  Later on we introduced the more powerful \"assignment\" API (just list_role_assignment for now).  Since these two classes of API return differnent types on entity, I kept the classes separate. So GrantAssignmentV3 implements the \"grant\" APIs, while RoleAssignmentV3 implements the \"assignment\" APIs.","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cee3420b85d30e9a5596f50ccea2893f71055460","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":" * :mod:`keystone.assignment.controllers.GrantAssignmentV3`"},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"},{"line_number":114,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV2`"},{"line_number":115,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"}],"source_content_type":"text/x-rst","patch_set":24,"id":"fa81d914_21717de0","line":112,"updated":"2015-01-30 05:38:16.000000000","message":"why is anything tenant related in the assignment backend?","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"03d679edd137148019937a7fca9e1aa477fc97ad","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":" * :mod:`keystone.assignment.controllers.GrantAssignmentV3`"},{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"},{"line_number":114,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV2`"},{"line_number":115,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"}],"source_content_type":"text/x-rst","patch_set":24,"id":"da86d52c_be1c2d15","line":112,"in_reply_to":"fa81d914_21717de0","updated":"2015-01-30 23:41:06.000000000","message":"So before this patch, although v2 \"Tenant\" APIs where in assignment.controllers.Tenant.  One of those APIs (get_projects_for_token()) needs to remain in assigment, since this API is really \"extract the user_id from this token, and then list all the projects on which that user has a role\" (yes, yuk!).  Since the resource controller got the assignment.controllers.Tenant class, I called the one that needs to remain in assignment assignment.controllers.TenantAssignment.","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cee3420b85d30e9a5596f50ccea2893f71055460","unresolved":false,"context_lines":[{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"},{"line_number":114,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV2`"},{"line_number":115,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"},{"line_number":116,"context_line":" * :mod:`keystone.assignment.controllers.RoleV3`"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"fa81d914_814ce9c9","line":114,"updated":"2015-01-30 05:38:16.000000000","message":"It\u0027s weird that some are V2 and others are unversioned, but are implied to be V2.","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"03d679edd137148019937a7fca9e1aa477fc97ad","unresolved":false,"context_lines":[{"line_number":111,"context_line":" * :mod:`keystone.assignment.controllers.ProjectAssignmentV3`"},{"line_number":112,"context_line":" * :mod:`keystone.assignment.controllers.TenantAssignment`"},{"line_number":113,"context_line":" * :mod:`keystone.assignment.controllers.Role`"},{"line_number":114,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV2`"},{"line_number":115,"context_line":" * :mod:`keystone.assignment.controllers.RoleAssignmentV3`"},{"line_number":116,"context_line":" * :mod:`keystone.assignment.controllers.RoleV3`"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"da86d52c_9ee68915","line":114,"in_reply_to":"fa81d914_814ce9c9","updated":"2015-01-30 23:41:06.000000000","message":"Yes, and they existed before...so I didn\u0027t want to change them unless is was important to distinguish.","commit_id":"316007601fd96be6563a2c40569ec11f52e91908"}],"keystone/assignment/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"de5cc7bc4b4a2f9783055889451fac1c80693213","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"@dependency.requires(\u0027assignment_api\u0027)"},{"line_number":350,"context_line":"class DomainV3(controller.V3Controller):"},{"line_number":351,"context_line":"    collection_name \u003d \u0027domains\u0027"},{"line_number":352,"context_line":"    member_name \u003d \u0027domain\u0027"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_34b57631","side":"PARENT","line":350,"updated":"2014-11-12 08:13:58.000000000","message":"i\u0027m surprised that domain was just CRUD, and no assignment bits, neat.","commit_id":"e10ad1441f34f5d5a706a530e41caaaba05b6b8f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a6d4424ac497933c7d1f125106ddd2d9c74ca68a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027resource_api\u0027)"},{"line_number":89,"context_line":"class Role(controller.V2Controller):"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    # COMPAT(essex-3)"},{"line_number":92,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_5225bbc0","line":89,"updated":"2014-11-11 23:46:34.000000000","message":"Not sure about the implications of renaming this class... But the methods are for \"Grants\", right?","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d5d6f94cc8748060db63bd22c2d48967cfa8fa55","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027resource_api\u0027)"},{"line_number":89,"context_line":"class Role(controller.V2Controller):"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    # COMPAT(essex-3)"},{"line_number":92,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_ad483e5c","line":89,"in_reply_to":"5a890539_5225bbc0","updated":"2014-11-11 23:52:12.000000000","message":"It\u0027s true...and I\u0027m kind of torn as to whether we rename it or not...","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a21b825a019ed03bc58980ce47c6ff7cfe662b05","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027resource_api\u0027)"},{"line_number":89,"context_line":"class Role(controller.V2Controller):"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    # COMPAT(essex-3)"},{"line_number":92,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_ed6326af","line":89,"in_reply_to":"5a890539_ad483e5c","updated":"2014-11-12 00:02:24.000000000","message":"yeah... was using the \"just seeing for this class for the first time\" hat. It\u0027s odd to see classes of concepts from somewhere else here, it might need some nice comments I guess.","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"da72ec25f4c00b3c86d0da589c5d72ee72754a5d","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027resource_api\u0027)"},{"line_number":89,"context_line":"class Role(controller.V2Controller):"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    # COMPAT(essex-3)"},{"line_number":92,"context_line":"    @controller.v2_deprecated"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_2614434d","line":89,"in_reply_to":"5a890539_ed6326af","updated":"2014-11-13 10:28:35.000000000","message":"OK, decided to change these names...to avoid confusion...","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"a6d4424ac497933c7d1f125106ddd2d9c74ca68a","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027, \u0027resource_api\u0027)"},{"line_number":235,"context_line":"class RoleV3(controller.V3Controller):"},{"line_number":236,"context_line":"    collection_name \u003d \u0027roles\u0027"},{"line_number":237,"context_line":"    member_name \u003d \u0027role\u0027"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f21dc774","line":235,"updated":"2014-11-11 23:46:34.000000000","message":"Same as above","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d5d6f94cc8748060db63bd22c2d48967cfa8fa55","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027, \u0027resource_api\u0027)"},{"line_number":235,"context_line":"class RoleV3(controller.V3Controller):"},{"line_number":236,"context_line":"    collection_name \u003d \u0027roles\u0027"},{"line_number":237,"context_line":"    member_name \u003d \u0027role\u0027"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_ad5f5e0d","line":235,"in_reply_to":"5a890539_f21dc774","updated":"2014-11-11 23:52:12.000000000","message":"...and of course if we changed the name, it would seem a bit odd that the collection.member name is \u0027role(s)\u0027..but we can\u0027t change that bit now!","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"}],"keystone/common/controller.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"de5cc7bc4b4a2f9783055889451fac1c80693213","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        else:"},{"line_number":286,"context_line":"            raise ValueError(_(\u0027Expected dict or list: %s\u0027) % type(ref))"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def format_project_list(self, tenant_refs, **kwargs):"},{"line_number":289,"context_line":"        \"\"\"Format a v2 style project list, including marker/limits.\"\"\""},{"line_number":290,"context_line":"        marker \u003d kwargs.get(\u0027marker\u0027)"},{"line_number":291,"context_line":"        first_index \u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_34e3b634","line":288,"updated":"2014-11-12 08:13:58.000000000","message":"I suppose this can live here","commit_id":"160f56cc1817e00b61e03af59f17b29355dea917"}]}
