)]}'
{"examples/identity/list.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":90,"context_line":"def list_role_domain_user_assignments(conn):"},{"line_number":91,"context_line":"    print(\"List Roles assignments for a user on domain:\")"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    for role in conn.identity.role_domain_group_assignments():"},{"line_number":94,"context_line":"        print(role)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_9118f3d4","line":93,"range":{"start_line":93,"start_character":42,"end_line":93,"end_character":47},"updated":"2017-01-31 10:29:53.000000000","message":"this should be \u0027user\u0027","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}],"openstack/identity/v3/_proxy.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"44c7d247a8596940170b46ec9c943c99e4086c6e","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        \"\"\""},{"line_number":885,"context_line":"        return self._update(_role.Role, role, **attrs)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"    def role_project_user_assignments(self, project, user):"},{"line_number":888,"context_line":"        \"\"\"Retrieve a generator of roles assignment for user on project"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        :param project : Either the ID of a project or a"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_dbb29f4b","line":887,"updated":"2017-01-06 05:32:05.000000000","message":"What I was suggesting is something like this:\n\n  def role_assignments(self, domain\u003dNone, project\u003dNone, group\u003dNone, user\u003dNone,\n                       effective\u003dTrue, include_names\u003dTrue):\n\n      if domain and project:\n         raise exception.InvalidRequest(\u0027Only one of domain or project can be specified\u0027)\n\n      if domain is None and project is None:\n         raise exception.InvalidRequest(\u0027Either domain or project should be specified\u0027)\n\n      if group and user:\n         raise exception.InvalidRequest(\u0027Only one of group or user can be specified\u0027)\n\n      if group is None and user is None:\n         raise exception.InvalidRequest(\u0027Either group or user should be specified\u0027)\n\n      if domain:\n           d \u003d self._get_resource()\n           if group:\n              g \u003d self._get_resource()\n              return self._list(_role_dg.RoleDomainGroupAssignment, ...)\n           else:\n              u \u003d self._get_resource()\n              return self._list(_role_du.RoleDomainUserAssignment, ...)\n      else:\n           p \u003d self._get_resource()\n           if group:\n              g \u003d self._get_resource()\n              return self._list(_role_pg.RoleProjectGroupAssignment, ...)\n           else:\n              u \u003d self._get_resource()\n              return self._list(_role_du.RoleProjectUserAssignment, ...)","commit_id":"492df7328a6651f35d37fce73c9461fe7b38d705"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"ff82440338a4b5b4e098ece6046b5bcf28a5cbf3","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                         **query):"},{"line_number":896,"context_line":"        \"\"\"Retrieve a generator of role_assignment or roles"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"        :param bool assignments: When set to ``False`` you will query for"},{"line_number":899,"context_line":"                    generator of roles instead of a generator of"},{"line_number":900,"context_line":"                    role_assignments by using one of the following option"},{"line_number":901,"context_line":"                    (domain + group, domain + user,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_06e24e2f","line":898,"updated":"2017-01-11 14:55:30.000000000","message":"This feels odd. How is roles() different from role_assignments(assignments\u003dFalse)? \n\nSince this is called role_assignments, it should only handle role assignments and not general roles...though please forgive me if I\u0027m completely misunderstanding this. I\u0027m not familiar with this kind of thing so I\u0027m just going off of the names, which I still think is helpful.","commit_id":"504be4f20f56ffbbcfcffed4200c29233ece7aea"}],"openstack/identity/v3/domain.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":45,"context_line":"    #: The links related to the domain resource."},{"line_number":46,"context_line":"    links \u003d resource.Body(\u0027links\u0027)"},{"line_number":47,"context_line":"    #: The path for users resource under project"},{"line_number":48,"context_line":"    users_key \u003d \u0027users\u0027"},{"line_number":49,"context_line":"    #: The path for groups resource under project"},{"line_number":50,"context_line":"    groups_key \u003d \u0027groups\u0027"},{"line_number":51,"context_line":"    #: The path for roles resource under project"},{"line_number":52,"context_line":"    roles_key \u003d \u0027roles\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def assign_role_to_user(self, session, user, role):"},{"line_number":55,"context_line":"        \"\"\"Assign role to user on domain\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_747c55ec","line":52,"range":{"start_line":47,"start_character":0,"end_line":52,"end_character":23},"updated":"2017-01-31 10:29:53.000000000","message":"these are confusing ... they will be treated as resource properties when generating docs for the resource.\n\nbetter avoid declare them in this way","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"bf5c5be577af0d961c18ca66cfd2d3ff51843d52","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            return True"},{"line_number":91,"context_line":"        return False"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def unassign_group_from_user(self, session, group, role):"},{"line_number":94,"context_line":"        \"\"\"Unassigns a role from a group on a domain\"\"\""},{"line_number":95,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027groups\u0027,"},{"line_number":96,"context_line":"                            group.id, \u0027roles\u0027, role.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_65b6fe3e","line":93,"range":{"start_line":93,"start_character":16,"end_line":93,"end_character":32},"updated":"2017-02-02 14:27:30.000000000","message":"this should be unassign_role_from_group?","commit_id":"21a53570f8094185197e6e34f663b5f3ee260368"}],"openstack/identity/v3/project.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    #: The ID of the parent of the project."},{"line_number":52,"context_line":"    #: New in version 3.4"},{"line_number":53,"context_line":"    parent_id \u003d resource.Body(\u0027parent_id\u0027)"},{"line_number":54,"context_line":"    #: The path for users resource under project"},{"line_number":55,"context_line":"    users_key \u003d \u0027users\u0027"},{"line_number":56,"context_line":"    #: The path for groups resource under project"},{"line_number":57,"context_line":"    groups_key \u003d \u0027groups\u0027"},{"line_number":58,"context_line":"    #: The path for roles resource under project"},{"line_number":59,"context_line":"    roles_key \u003d \u0027roles\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def assign_role_to_user(self, session, user, role):"},{"line_number":62,"context_line":"        \"\"\"Assign role to user on project\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_f470450d","line":59,"range":{"start_line":54,"start_character":0,"end_line":59,"end_character":23},"updated":"2017-01-31 10:29:53.000000000","message":"see comment to domain","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"bf5c5be577af0d961c18ca66cfd2d3ff51843d52","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            return True"},{"line_number":98,"context_line":"        return False"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def unassign_group_from_user(self, session, group, role):"},{"line_number":101,"context_line":"        \"\"\"Unassigns a role from a group on a project\"\"\""},{"line_number":102,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027groups\u0027,"},{"line_number":103,"context_line":"                            group.id, \u0027roles\u0027, role.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_25da3679","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":32},"updated":"2017-02-02 14:27:30.000000000","message":"unassign_role_from_group","commit_id":"21a53570f8094185197e6e34f663b5f3ee260368"}],"openstack/identity/v3/role.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # Properties"},{"line_number":35,"context_line":"    #: References the domain ID which owns the role; if a domain ID is not"},{"line_number":36,"context_line":"    #: specified by the client, the Identity service implementation will"},{"line_number":37,"context_line":"    #: default it to the domain ID to which the client\u0027s token is scoped."},{"line_number":38,"context_line":"    #: *Type: string*"},{"line_number":39,"context_line":"    domain_id \u003d resource.Body(\u0027domain_id\u0027)"},{"line_number":40,"context_line":"    #: Unique role name, within the owning domain. *Type: string*"},{"line_number":41,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":42,"context_line":"    #: The links for the service resource."},{"line_number":43,"context_line":"    links \u003d resource.Body(\u0027links\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_74ca951c","side":"PARENT","line":40,"range":{"start_line":35,"start_character":0,"end_line":40,"end_character":65},"updated":"2017-01-31 10:29:53.000000000","message":"this change is invalid, the comment to \u0027name\u0027 is deleted but the comment to domain_id is left.","commit_id":"969661095dd183b7cdb01a89c748863ad65e78e0"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"bf5c5be577af0d961c18ca66cfd2d3ff51843d52","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # Properties"},{"line_number":35,"context_line":"    #: References the domain ID which owns the role; if a domain ID is not"},{"line_number":36,"context_line":"    #: specified by the client, the Identity service implementation will"},{"line_number":37,"context_line":"    #: default it to the domain ID to which the client\u0027s token is scoped."},{"line_number":38,"context_line":"    #: Unique role name, within the owning domain. *Type: string*"},{"line_number":39,"context_line":"    name \u003d resource.Body(\u0027name\u0027)"},{"line_number":40,"context_line":"    #: The links for the service resource."}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_a53b869b","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":73},"updated":"2017-02-02 14:27:30.000000000","message":"these lines should go away if domain_id is removed","commit_id":"21a53570f8094185197e6e34f663b5f3ee260368"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"0f4ea14d86f26403a21484d5d1c95a5865a36d3b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    put_create \u003d True"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    _query_mapping \u003d resource.QueryParameters("},{"line_number":32,"context_line":"        \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # Properties"},{"line_number":35,"context_line":"    #: Unique role name, within the owning domain. *Type: string*"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_21657a1d","line":32,"range":{"start_line":32,"start_character":17,"end_line":32,"end_character":26},"updated":"2017-02-07 06:09:42.000000000","message":"not sure why there is only \u0027domain_id\u0027 here ... pls double check?","commit_id":"d8f62dc0e9a07a5c6ad42a50962c2c4869833821"}],"openstack/identity/v3/role_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from openstack import resource2 as resource"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class RoleAssignment(resource.Resource):"},{"line_number":18,"context_line":"    resource_key \u003d \u0027role_assignment\u0027"},{"line_number":19,"context_line":"    resources_key \u003d \u0027role_assignments\u0027"},{"line_number":20,"context_line":"    base_path \u003d \u0027/role_assignments\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_949b8117","line":17,"range":{"start_line":17,"start_character":6,"end_line":17,"end_character":20},"updated":"2017-01-31 10:29:53.000000000","message":"from a SDK user\u0027s perspective, this resource is not that useful, but ... anyway. Not a strong opinion here.","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"bf5c5be577af0d961c18ca66cfd2d3ff51843d52","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    _query_mapping \u003d resource.QueryParameters("},{"line_number":27,"context_line":"        \u0027group_id\u0027, \u0027role_id\u0027, \u0027scope_domain_id\u0027, \u0027scope_project_id\u0027,"},{"line_number":28,"context_line":"        \u0027user_id\u0027,"},{"line_number":29,"context_line":"        effective\u003d\u0027effective\u0027, include_names\u003d\u0027include_names\u0027,"},{"line_number":30,"context_line":"        include_subtree\u003d\u0027include_subtree\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    )"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_e55caeef","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":41},"updated":"2017-02-02 14:27:30.000000000","message":"if there is no renaming here, you don\u0027t need to use this form, just \u0027effective\u0027, \u0027include_names\u0027, ... would be okay","commit_id":"21a53570f8094185197e6e34f663b5f3ee260368"}],"openstack/tests/unit/identity/v3/test_role_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":24,"context_line":"}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestRoleDomainGroupAssignment(testtools.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_basic(self):"},{"line_number":30,"context_line":"        sot \u003d role_assignment.RoleAssignment()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_34aacd19","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":35},"updated":"2017-01-31 10:29:53.000000000","message":"this name is bad","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}],"openstack/tests/unit/identity/v3/test_role_domain_group_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack.identity.v3 import role_domain_group_assignment"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"IDENTIFIER \u003d \u0027IDENTIFIER\u0027"},{"line_number":18,"context_line":"EXAMPLE \u003d {"},{"line_number":19,"context_line":"    \u0027id\u0027: IDENTIFIER,"},{"line_number":20,"context_line":"    \u0027links\u0027: {\u0027self\u0027: \u0027http://example.com/user1\u0027},"},{"line_number":21,"context_line":"    \u0027name\u0027: \u00272\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_3481ed8f","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":7},"updated":"2017-01-31 10:29:53.000000000","message":"this should contain domain_id and group_id properties","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}],"openstack/tests/unit/identity/v3/test_role_domain_user_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack.identity.v3 import role_domain_user_assignment"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"IDENTIFIER \u003d \u0027IDENTIFIER\u0027"},{"line_number":18,"context_line":"EXAMPLE \u003d {"},{"line_number":19,"context_line":"    \u0027id\u0027: IDENTIFIER,"},{"line_number":20,"context_line":"    \u0027links\u0027: {\u0027self\u0027: \u0027http://example.com/user1\u0027},"},{"line_number":21,"context_line":"    \u0027name\u0027: \u00272\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_b4431d6b","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":7},"updated":"2017-01-31 10:29:53.000000000","message":"this should include domain_id and user_id properties","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}],"openstack/tests/unit/identity/v3/test_role_project_group_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack.identity.v3 import role_project_group_assignment"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"IDENTIFIER \u003d \u0027IDENTIFIER\u0027"},{"line_number":18,"context_line":"EXAMPLE \u003d {"},{"line_number":19,"context_line":"    \u0027id\u0027: IDENTIFIER,"},{"line_number":20,"context_line":"    \u0027links\u0027: {\u0027self\u0027: \u0027http://example.com/user1\u0027},"},{"line_number":21,"context_line":"    \u0027name\u0027: \u00272\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_743455fb","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":7},"updated":"2017-01-31 10:29:53.000000000","message":"this should contain project_id and group_id properties","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}],"openstack/tests/unit/identity/v3/test_role_project_user_assignment.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"d262458dd09c9ce1291c3e8ac6294f8cc796e279","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from openstack.identity.v3 import role_project_user_assignment"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"IDENTIFIER \u003d \u0027IDENTIFIER\u0027"},{"line_number":18,"context_line":"EXAMPLE \u003d {"},{"line_number":19,"context_line":"    \u0027id\u0027: IDENTIFIER,"},{"line_number":20,"context_line":"    \u0027links\u0027: {\u0027self\u0027: \u0027http://example.com/user1\u0027},"},{"line_number":21,"context_line":"    \u0027name\u0027: \u00272\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_d43d09de","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":7},"updated":"2017-01-31 10:29:53.000000000","message":"this should include the project_id and user_id properties","commit_id":"2489451b757917afe90e3cfc5ec9ce0004de718a"}]}
