)]}'
{"doc/source/admin/federation/mapping_combinations.rst":[{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3204eb5af4fe56706ede163b96925086690aac74","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Groups, projects and roles can have multiple values. Each value must be"},{"line_number":282,"context_line":"separated by a `;`. Example: OIDC_GROUPS\u003ddevelopers;testers"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"other conditions"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf51134e_f47f4d63","line":282,"range":{"start_line":281,"start_character":0,"end_line":282,"end_character":59},"updated":"2020-07-09 11:44:37.000000000","message":"Can we enhance this documentation by giving projects and roles Mapping examples, and also mention about pre-condition that roles and project should exist when the assertion is mapped, then the mapping will work fine. It is an important piece of information for users.","commit_id":"544d3723a750566941e701eccdacfa181b5bb75e"}],"keystone/federation/utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            for role in project[\u0027roles\u0027]:"},{"line_number":596,"context_line":"                role_names_list.extend(self._expand_listlike(role[\u0027name\u0027]))"},{"line_number":597,"context_line":"            project_dicts.extend([{\u0027name\u0027: p_name, \u0027roles\u0027: ["},{"line_number":598,"context_line":"                                    {\u0027name\u0027: r_name}"},{"line_number":599,"context_line":"                                    for r_name in role_names_list"},{"line_number":600,"context_line":"                                 ]} for p_name in project_names_list])"},{"line_number":601,"context_line":"        return project_dicts"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_61628f40","line":598,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":597,"context_line":"            project_dicts.extend([{\u0027name\u0027: p_name, \u0027roles\u0027: ["},{"line_number":598,"context_line":"                                    {\u0027name\u0027: r_name}"},{"line_number":599,"context_line":"                                    for r_name in role_names_list"},{"line_number":600,"context_line":"                                 ]} for p_name in project_names_list])"},{"line_number":601,"context_line":"        return project_dicts"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _expand_listlike(self, value):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_4165cb44","line":600,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        return project_dicts"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _expand_listlike(self, value):"},{"line_number":604,"context_line":"        \"\"\"If value is a string representation of a list, parse it to a real"},{"line_number":605,"context_line":"        list. Also, if the provided value contains only one element, it will"},{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_a15ca77e","line":604,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _expand_listlike(self, value):"},{"line_number":604,"context_line":"        \"\"\"If value is a string representation of a list, parse it to a real"},{"line_number":605,"context_line":"        list. Also, if the provided value contains only one element, it will"},{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_815fe370","line":605,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":603,"context_line":"    def _expand_listlike(self, value):"},{"line_number":604,"context_line":"        \"\"\"If value is a string representation of a list, parse it to a real"},{"line_number":605,"context_line":"        list. Also, if the provided value contains only one element, it will"},{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_e155ff51","line":606,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        \"\"\"If value is a string representation of a list, parse it to a real"},{"line_number":605,"context_line":"        list. Also, if the provided value contains only one element, it will"},{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"},{"line_number":610,"context_line":"        today (see function _update_local_mapping())"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_c150bb61","line":607,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        list. Also, if the provided value contains only one element, it will"},{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"},{"line_number":610,"context_line":"        today (see function _update_local_mapping())"},{"line_number":611,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_2150975d","line":608,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        be parsed as a simple string, and not a list or the representation"},{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"},{"line_number":610,"context_line":"        today (see function _update_local_mapping())"},{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_014bd3af","line":609,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        of a list."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"},{"line_number":610,"context_line":"        today (see function _update_local_mapping())"},{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        try:"},{"line_number":613,"context_line":"            value_list \u003d ast.literal_eval(value)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_61c72f14","line":610,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        This is necessary due to the way we do direct mapping substitutions"},{"line_number":610,"context_line":"        today (see function _update_local_mapping())"},{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        try:"},{"line_number":613,"context_line":"            value_list \u003d ast.literal_eval(value)"},{"line_number":614,"context_line":"        except (ValueError, SyntaxError):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_41caeb19","line":611,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb3c2c069eba3efea6cdd5460cb9adb2bc933d","unresolved":false,"context_lines":[{"line_number":705,"context_line":"                group_dicts \u003d self._normalize_groups(identity_value)"},{"line_number":706,"context_line":"                group_names.extend(group_dicts)"},{"line_number":707,"context_line":"            if \u0027group_ids\u0027 in identity_value:"},{"line_number":708,"context_line":"                group_ids.update(self._expand_listlike(identity_value[\u0027group_ids\u0027]))"},{"line_number":709,"context_line":"            if \u0027projects\u0027 in identity_value:"},{"line_number":710,"context_line":"                project_dicts \u003d self._normalize_projects(identity_value)"},{"line_number":711,"context_line":"                projects.extend(project_dicts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_a1d147d0","line":708,"updated":"2020-05-14 00:44:21.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"f3c35038a1cb2a7a2229ee46f489a303259e6d55"}],"keystone/tests/unit/mapping_fixtures.py":[{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3204eb5af4fe56706ede163b96925086690aac74","unresolved":false,"context_lines":[{"line_number":1746,"context_line":"            \"remote\": ["},{"line_number":1747,"context_line":"                {"},{"line_number":1748,"context_line":"                    \"type\": \"UserName\""},{"line_number":1749,"context_line":"                },"},{"line_number":1750,"context_line":"                {"},{"line_number":1751,"context_line":"                    \"type\": \"Email\","},{"line_number":1752,"context_line":"                },"},{"line_number":1753,"context_line":"                {"},{"line_number":1754,"context_line":"                    \"type\": \"orgPersonType\","},{"line_number":1755,"context_line":"                    \"any_one_of\": ["},{"line_number":1756,"context_line":"                        \"Employee\""},{"line_number":1757,"context_line":"                    ]"},{"line_number":1758,"context_line":"                }"},{"line_number":1759,"context_line":"            ]"},{"line_number":1760,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_5404394a","side":"PARENT","line":1757,"range":{"start_line":1749,"start_character":14,"end_line":1757,"end_character":21},"updated":"2020-07-09 11:44:37.000000000","message":"Any specific reason of removing this?","commit_id":"18f96a8a3eadb5502bc7b6f7fe722333351ce456"},{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3204eb5af4fe56706ede163b96925086690aac74","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"    \u0027openstack_roles\u0027: \u0027Admin\u0027,"},{"line_number":1695,"context_line":"    \u0027openstack_groups\u0027: \u0027JSON:{\"name\":\"group1\",\"domain\":{\"name\":\"xxx\"}};\u0027"},{"line_number":1696,"context_line":"                        \u0027JSON:{\"name\":\"group2\",\"domain\":{\"name\":\"yyy\"}}\u0027"},{"line_number":1697,"context_line":"}"},{"line_number":1698,"context_line":""},{"line_number":1699,"context_line":"MAPPING_UNICODE \u003d {"},{"line_number":1700,"context_line":"    \"rules\": ["}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_3a6d2fcc","line":1697,"updated":"2020-07-09 11:44:37.000000000","message":"It would be great if you can add one Mapping fixture for testing K2K federation and test for multiple projects.","commit_id":"544d3723a750566941e701eccdacfa181b5bb75e"}],"releasenotes/notes/bug-1878496-a2c5166ecfe3ca1a.yaml":[{"author":{"_account_id":27621,"name":"Vishakha Agarwal","email":"agarwalvishakha18@gmail.com","username":"Vishakha"},"change_message_id":"3204eb5af4fe56706ede163b96925086690aac74","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for mapping multiple auto-provisioned Projects from a"},{"line_number":5,"context_line":"    multi-value remote assertion. This allows you to e.g., map multiple groups"},{"line_number":6,"context_line":"    from an IdP into auto-provisioned projects. It is also possible to map"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"bf51134e_f4b3cde7","line":3,"updated":"2020-07-09 11:44:37.000000000","message":"Please add a link to the bug report","commit_id":"544d3723a750566941e701eccdacfa181b5bb75e"}]}
