)]}'
{"keystone/common/ldap/core.py":[{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"079569a690592eae4f4285ac5b37bf1f3b8031b3","unresolved":false,"context_lines":[{"line_number":1917,"context_line":"    immutable_attrs \u003d [\u0027name\u0027]"},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":""},{"line_number":1920,"context_line":"class ValidateLdapConfigDN(object):"},{"line_number":1921,"context_line":"    \"\"\"Validation for distinguished names in ldap config\"\"\""},{"line_number":1922,"context_line":""},{"line_number":1923,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_5630799e","line":1920,"updated":"2015-11-04 22:17:40.000000000","message":"Why is this a class? It has no data. You left the nested functions instead of making them (static)methods too.","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f5012188fa743a887be6ae5a4c2c3d4fb7540a26","unresolved":false,"context_lines":[{"line_number":1917,"context_line":"    immutable_attrs \u003d [\u0027name\u0027]"},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":""},{"line_number":1920,"context_line":"class ValidateLdapConfigDN(object):"},{"line_number":1921,"context_line":"    \"\"\"Validation for distinguished names in ldap config\"\"\""},{"line_number":1922,"context_line":""},{"line_number":1923,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_789fab50","line":1920,"in_reply_to":"fa80f949_5630799e","updated":"2015-11-11 21:28:26.000000000","message":"I think this is okay that this is a class. would you recommend something different?","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"079569a690592eae4f4285ac5b37bf1f3b8031b3","unresolved":false,"context_lines":[{"line_number":1931,"context_line":"                # When the ldap function converts a string to distinguished"},{"line_number":1932,"context_line":"                # name it will catch some cases of invalid characters"},{"line_number":1933,"context_line":"                _tree_dn_list \u003d ldap.dn.str2dn(config[\u0027ldap\u0027][tree_dn])"},{"line_number":1934,"context_line":""},{"line_number":1935,"context_line":"            except ldap.DECODING_ERROR:"},{"line_number":1936,"context_line":"                msg \u003d _(\u0027Invalid character in %(distinguished_name)s.\u0027) % {"},{"line_number":1937,"context_line":"                    \u0027distinguished_name\u0027: tree_dn}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_f6208d9d","line":1934,"updated":"2015-11-04 22:17:40.000000000","message":"Why the empty line?","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f5012188fa743a887be6ae5a4c2c3d4fb7540a26","unresolved":false,"context_lines":[{"line_number":1931,"context_line":"                # When the ldap function converts a string to distinguished"},{"line_number":1932,"context_line":"                # name it will catch some cases of invalid characters"},{"line_number":1933,"context_line":"                _tree_dn_list \u003d ldap.dn.str2dn(config[\u0027ldap\u0027][tree_dn])"},{"line_number":1934,"context_line":""},{"line_number":1935,"context_line":"            except ldap.DECODING_ERROR:"},{"line_number":1936,"context_line":"                msg \u003d _(\u0027Invalid character in %(distinguished_name)s.\u0027) % {"},{"line_number":1937,"context_line":"                    \u0027distinguished_name\u0027: tree_dn}"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_b1e10001","line":1934,"in_reply_to":"fa80f949_f6208d9d","updated":"2015-11-11 21:28:26.000000000","message":"oh I thought these were double lines. Done","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"079569a690592eae4f4285ac5b37bf1f3b8031b3","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"                raise exception.InvalidDomainConfig(reason\u003dmsg)"},{"line_number":1940,"context_line":""},{"line_number":1941,"context_line":"            for local_tree_dn in _tree_dn_list:"},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"                for local_tree_dn_atribute in local_tree_dn:"},{"line_number":1944,"context_line":"                    # Distinguished name contains a multi-valued RDN"},{"line_number":1945,"context_line":"                    if local_tree_dn_atribute[2] \u003e 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_76357dd8","line":1942,"updated":"2015-11-04 22:17:40.000000000","message":"Why the empty line?","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f5012188fa743a887be6ae5a4c2c3d4fb7540a26","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"                raise exception.InvalidDomainConfig(reason\u003dmsg)"},{"line_number":1940,"context_line":""},{"line_number":1941,"context_line":"            for local_tree_dn in _tree_dn_list:"},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"                for local_tree_dn_atribute in local_tree_dn:"},{"line_number":1944,"context_line":"                    # Distinguished name contains a multi-valued RDN"},{"line_number":1945,"context_line":"                    if local_tree_dn_atribute[2] \u003e 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_f1d78821","line":1942,"in_reply_to":"fa80f949_76357dd8","updated":"2015-11-11 21:28:26.000000000","message":"Done","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"079569a690592eae4f4285ac5b37bf1f3b8031b3","unresolved":false,"context_lines":[{"line_number":1957,"context_line":"                        msg \u003d _(\u0027Invalid character in %(tree_dn)s:\u0027"},{"line_number":1958,"context_line":"                                \u0027 %(invalid_chars)s\u0027) % {"},{"line_number":1959,"context_line":"                                    \u0027invalid_chars\u0027:"},{"line_number":1960,"context_line":"                                        \u0027, \u0027.join(_invalid_char),"},{"line_number":1961,"context_line":"                                    \u0027tree_dn\u0027: tree_dn}"},{"line_number":1962,"context_line":""},{"line_number":1963,"context_line":"                        raise exception.InvalidDomainConfig(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_56863966","line":1960,"updated":"2015-11-04 22:17:40.000000000","message":"Does this need to be dropped down a line?","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f5012188fa743a887be6ae5a4c2c3d4fb7540a26","unresolved":false,"context_lines":[{"line_number":1957,"context_line":"                        msg \u003d _(\u0027Invalid character in %(tree_dn)s:\u0027"},{"line_number":1958,"context_line":"                                \u0027 %(invalid_chars)s\u0027) % {"},{"line_number":1959,"context_line":"                                    \u0027invalid_chars\u0027:"},{"line_number":1960,"context_line":"                                        \u0027, \u0027.join(_invalid_char),"},{"line_number":1961,"context_line":"                                    \u0027tree_dn\u0027: tree_dn}"},{"line_number":1962,"context_line":""},{"line_number":1963,"context_line":"                        raise exception.InvalidDomainConfig(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_d1dcc41a","line":1960,"in_reply_to":"fa80f949_56863966","updated":"2015-11-11 21:28:26.000000000","message":"good call","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"eed933406af20613119abe0268fbf2aa9701cc58","unresolved":false,"context_lines":[{"line_number":1937,"context_line":"            try:"},{"line_number":1938,"context_line":"                # When the ldap function converts a string to distinguished"},{"line_number":1939,"context_line":"                # name it will catch some cases of invalid characters"},{"line_number":1940,"context_line":"                import pdb; pdb.set_trace()"},{"line_number":1941,"context_line":"                _tree_dn_list \u003d ldap3.utils.parse_dn(config[\u0027ldap\u0027][tree_dn])"},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"            except ldap3.LDAPInvalidDnError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_ec2f553c","line":1940,"updated":"2015-11-10 02:34:42.000000000","message":"remove L1940","commit_id":"67cfd543ffaa5a00a2182f1a3526942433b49771"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"fead8b504e0b001ac0852508dcb82eb5c8b16ada","unresolved":false,"context_lines":[{"line_number":1925,"context_line":"    immutable_attrs \u003d [\u0027name\u0027]"},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":""},{"line_number":1928,"context_line":"class ValidateLdapConfigDN(object):"},{"line_number":1929,"context_line":"    \"\"\"Validation for distinguished names in ldap config\"\"\""},{"line_number":1930,"context_line":""},{"line_number":1931,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_1f29339e","line":1928,"updated":"2015-11-11 22:04:29.000000000","message":"What value is this class providing? A namespace? This just looks like two functions to me.\n\nYou could always add a file just for them to keep them separate if really needed.","commit_id":"315e92cc876a6b69f7fd4a5482e7ba3066d600b2"}],"keystone/resource/core.py":[{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"a6041c49587196dedc1c050725aab2f5a16e3b21","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"        self.get_config_with_sensitive_info.invalidate(self, domain_id)"},{"line_number":1015,"context_line":"        return self._list_to_config(whitelisted)"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"    def _validate_config_dn(self, config):"},{"line_number":1018,"context_line":"        if config.get(\u0027ldap\u0027):"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"            def _check_tree_dn(tree_dn):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_ff6b21b7","line":1017,"updated":"2015-11-02 22:25:25.000000000","message":"Why add a new method when there is already _assert_valid_config?","commit_id":"5bf8e971b15c6bd55da30c6b451449991a83f4c0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"680cd301efbf33ad745b74febefe61d4212f7cc2","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"    def _validate_config_dn(self, config):"},{"line_number":1018,"context_line":"        if config.get(\u0027ldap\u0027):"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"            def _check_tree_dn(tree_dn):"},{"line_number":1021,"context_line":"                invalid_chars \u003d {\u0027,\u0027, \u0027+\u0027, \u0027\"\u0027, \u0027\\\\\u0027, \u0027\u003c\u0027, \u0027\u003e\u0027, \u0027;\u0027, \u0027\u003d\u0027, \u0027/\u0027}"},{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"                local_tree_dn \u003d config[\u0027ldap\u0027][tree_dn].split(\u0027,\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_df7bc526","line":1020,"updated":"2015-11-02 22:41:07.000000000","message":"Can\u0027t we use ldap.dn.str2dn() to do the heavy lifting?\n\nhttp://www.python-ldap.org/doc/html/ldap-dn.html\n\nWe should be getting ldap.INVALID_DN_SYNTAX on a bogus DN.","commit_id":"5bf8e971b15c6bd55da30c6b451449991a83f4c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d7563a2e49fc02f180606e7dbba470c96128213a","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from ldap import DECODING_ERROR"},{"line_number":18,"context_line":"from ldap.dn import str2dn as ldap_dn_str2dn"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_28db227e","line":17,"updated":"2015-11-04 15:27:35.000000000","message":"remove this line completely and use DECODING_ERROR by referencing it as:\n\n  ldap.DECODING_ERROR","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from ldap import DECODING_ERROR"},{"line_number":18,"context_line":"from ldap.dn import str2dn as ldap_dn_str2dn"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_39be13d5","line":17,"in_reply_to":"fa80f949_28db227e","updated":"2015-11-04 22:02:59.000000000","message":"Done","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d7563a2e49fc02f180606e7dbba470c96128213a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from ldap import DECODING_ERROR"},{"line_number":18,"context_line":"from ldap.dn import str2dn as ldap_dn_str2dn"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_0873be81","line":18,"updated":"2015-11-04 15:27:35.000000000","message":"hmm, now we\u0027re introducing ldap code in the core of resource, i\u0027m not sure here is the best place for it","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"668ce66ad61837557068b4e78967d9a7261cdb9e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from ldap import DECODING_ERROR"},{"line_number":18,"context_line":"from ldap.dn import str2dn as ldap_dn_str2dn"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_fe0cf13c","line":18,"in_reply_to":"fa80f949_0873be81","updated":"2015-11-04 17:07:42.000000000","message":"Good point. Perhaps we move this code to keystone.common.ldap.core? Since this is LDAP-specific, it should belong there.","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from ldap import DECODING_ERROR"},{"line_number":18,"context_line":"from ldap.dn import str2dn as ldap_dn_str2dn"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_5e073d1c","line":18,"in_reply_to":"fa80f949_fe0cf13c","updated":"2015-11-04 22:02:59.000000000","message":"Sorry I didn\u0027t realize there was a specific place for this sort of thing.  Let me know if what I did fixes your concerns. :)","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"0a459930248c444f7eeeef69380d6d78805f6ba0","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        self.get_config_with_sensitive_info.invalidate(self, domain_id)"},{"line_number":1017,"context_line":"        return self._list_to_config(whitelisted)"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def _validate_config_dn(self, config):"},{"line_number":1020,"context_line":"        if config.get(\u0027ldap\u0027):"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"            def _check_tree_dn(tree_dn):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_f7af56e1","line":1019,"updated":"2015-11-03 23:27:51.000000000","message":"Not saying you have to but you could say \u0027if not get: return\u0027 and save a level of indentation for the entire function. Might remove the ugly hanging indents for the exceptions.","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d7563a2e49fc02f180606e7dbba470c96128213a","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        self.get_config_with_sensitive_info.invalidate(self, domain_id)"},{"line_number":1017,"context_line":"        return self._list_to_config(whitelisted)"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def _validate_config_dn(self, config):"},{"line_number":1020,"context_line":"        if config.get(\u0027ldap\u0027):"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"            def _check_tree_dn(tree_dn):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_0d0d103e","line":1019,"in_reply_to":"fa80f949_f7af56e1","updated":"2015-11-04 15:27:35.000000000","message":"++\n\n  if not config.get(\u0027ldap\u0027)\n    return\n  else:\n   the rest","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        self.get_config_with_sensitive_info.invalidate(self, domain_id)"},{"line_number":1017,"context_line":"        return self._list_to_config(whitelisted)"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def _validate_config_dn(self, config):"},{"line_number":1020,"context_line":"        if config.get(\u0027ldap\u0027):"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"            def _check_tree_dn(tree_dn):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_08f99780","line":1019,"in_reply_to":"fa80f949_f7af56e1","updated":"2015-11-04 22:02:59.000000000","message":"Good call! Done","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d7563a2e49fc02f180606e7dbba470c96128213a","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"                            invalid_chars.intersection(local_tree_dn_value))"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"                        if contains_invalid_char:"},{"line_number":1048,"context_line":"                            containing_invalid_char \u003d ["},{"line_number":1049,"context_line":"                                \u0027\\\u0027\u0027 + x + \u0027\\\u0027\u0027 for x"},{"line_number":1050,"context_line":"                                in contains_invalid_char]"},{"line_number":1051,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_28948289","line":1048,"updated":"2015-11-04 15:27:35.000000000","message":"shorten \"containing_invalid_char\" to \"invalid_chars\" and make your pep8 life easier","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"                            invalid_chars.intersection(local_tree_dn_value))"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"                        if contains_invalid_char:"},{"line_number":1048,"context_line":"                            containing_invalid_char \u003d ["},{"line_number":1049,"context_line":"                                \u0027\\\u0027\u0027 + x + \u0027\\\u0027\u0027 for x"},{"line_number":1050,"context_line":"                                in contains_invalid_char]"},{"line_number":1051,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_79681b88","line":1048,"in_reply_to":"fa80f949_28948289","updated":"2015-11-04 22:02:59.000000000","message":"Done","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d7563a2e49fc02f180606e7dbba470c96128213a","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"                                \u0027\\\u0027\u0027 + x + \u0027\\\u0027\u0027 for x"},{"line_number":1050,"context_line":"                                in contains_invalid_char]"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"                            msg \u003d _(\u0027Inavlid character in \u0027"},{"line_number":1053,"context_line":"                                    \u0027%(distinguished_name)s: \u0027"},{"line_number":1054,"context_line":"                                    \u0027%(invalid_chars)s\u0027) % {"},{"line_number":1055,"context_line":"                                        \u0027invalid_chars\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_e8b67a3c","line":1052,"updated":"2015-11-04 15:27:35.000000000","message":"Invalid*","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"                                \u0027\\\u0027\u0027 + x + \u0027\\\u0027\u0027 for x"},{"line_number":1050,"context_line":"                                in contains_invalid_char]"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"                            msg \u003d _(\u0027Inavlid character in \u0027"},{"line_number":1053,"context_line":"                                    \u0027%(distinguished_name)s: \u0027"},{"line_number":1054,"context_line":"                                    \u0027%(invalid_chars)s\u0027) % {"},{"line_number":1055,"context_line":"                                        \u0027invalid_chars\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_1906afce","line":1052,"in_reply_to":"fa80f949_e8b67a3c","updated":"2015-11-04 22:02:59.000000000","message":"Done.  I am disappointed in myself for not seeing that :(","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"}],"keystone/tests/unit/backend/domain_config/core.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"c899b8596463f13a99630648518210bfbeff6a93","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            self.domain[\u0027id\u0027])"},{"line_number":234,"context_line":"        self.assertEqual(config, res)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def test_user_tree_dn_with_invalid_char_foward_slash(self):"},{"line_number":237,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: uuid.uuid4().hex,"},{"line_number":238,"context_line":"                           \u0027user_tree_dn\u0027:"},{"line_number":239,"context_line":"                               \u0027CN\u003duser1, CN\u003duser\\s, DC\u003dContoso, DC\u003dcom\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_35ecf3c6","line":236,"updated":"2015-11-04 03:25:51.000000000","message":"you need to move these tests to a separate file and exclude it from py34 testenv since python-ldap is not supported in py34","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"151840161f1b12588ab4375246fa6a28b4ab4412","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            self.domain[\u0027id\u0027])"},{"line_number":234,"context_line":"        self.assertEqual(config, res)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def test_user_tree_dn_with_invalid_char_foward_slash(self):"},{"line_number":237,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: uuid.uuid4().hex,"},{"line_number":238,"context_line":"                           \u0027user_tree_dn\u0027:"},{"line_number":239,"context_line":"                               \u0027CN\u003duser1, CN\u003duser\\s, DC\u003dContoso, DC\u003dcom\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa80f949_7c1494f4","line":236,"in_reply_to":"fa80f949_35ecf3c6","updated":"2015-11-04 22:02:59.000000000","message":"Done","commit_id":"84ddc152e87d426394aee073981e63fbe1dcbbf2"}],"keystone/tests/unit/backend/domain_config/test_config_validation.py":[{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"079569a690592eae4f4285ac5b37bf1f3b8031b3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        super(LdapConfigDistinguishedNameTests, self).setUp()"},{"line_number":23,"context_line":"        self.domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":24,"context_line":"        self.load_backends()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_user_tree_dn_with_invalid_char_back_slash(self):"},{"line_number":27,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: uuid.uuid4().hex,"},{"line_number":28,"context_line":"                           \u0027user_tree_dn\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_36bb75e7","line":25,"updated":"2015-11-04 22:17:40.000000000","message":"To be proper unit style tests, shouldn\u0027t these test ValidateLdapConfigDN directly?","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f5012188fa743a887be6ae5a4c2c3d4fb7540a26","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        super(LdapConfigDistinguishedNameTests, self).setUp()"},{"line_number":23,"context_line":"        self.domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":24,"context_line":"        self.load_backends()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_user_tree_dn_with_invalid_char_back_slash(self):"},{"line_number":27,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: uuid.uuid4().hex,"},{"line_number":28,"context_line":"                           \u0027user_tree_dn\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_b13fc0d5","line":25,"in_reply_to":"fa80f949_36bb75e7","updated":"2015-11-11 21:28:26.000000000","message":"Yes! Done.","commit_id":"1929466d7e1b3c0e20184b682a66d5ad7a437196"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"441d76589169d97ebfd799fac5838417189a90ca","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class LdapConfigDistinguishedNameTests(BaseTestCase):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def test_user_tree_dn_with_invalid_char_back_slash(self):"},{"line_number":23,"context_line":"        config \u003d {\u0027ldap\u0027: {\u0027url\u0027: uuid.uuid4().hex,"},{"line_number":24,"context_line":"                           \u0027user_tree_dn\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_a829cb8b","line":21,"updated":"2015-11-11 22:58:25.000000000","message":"Where are the successful (non failing) validations? You only show that the code raises exceptions but not that it ever passes.\n\nWhy not use mock to patch out the LDAP code so you can control success and failure and possibly make the test faster. It is not important that the LDAP code work they have their own tests. You just need to show that you use the module correctly.","commit_id":"c6ffdade6c08c9ba099cf9dff512a302e918078a"}]}
