)]}'
{"keystone/cmd/doctor/ldap.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2ade9cdd71cc31a8d78d09f5010521032fc6d58d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import keystone.conf"},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_9a4fbabd","line":14,"updated":"2016-08-31 23:03:56.000000000","message":"stdlib imports should be in the first grouping. http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"571ec77bdc28c2ee560c78542c3c2fb6fc3f638a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2ade9cdd71cc31a8d78d09f5010521032fc6d58d","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":56,"context_line":"    \"\"\"[ldap] domain specific configuration files exist.\"\"\""},{"line_number":57,"context_line":"    return ("},{"line_number":58,"context_line":"        CONF.ldap.domain_specific_drivers_enabled"},{"line_number":59,"context_line":"        and not os.listdir(CONF.ldap.domain_config_dir))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ba4e3ebf","line":56,"updated":"2016-08-31 23:03:56.000000000","message":"++","commit_id":"571ec77bdc28c2ee560c78542c3c2fb6fc3f638a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"da9157ea3e774ff8ca344a69b9b27543cca27e03","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":56,"context_line":"    \"\"\"[ldap] domain specific configuration files exist.\"\"\""},{"line_number":57,"context_line":"    return ("},{"line_number":58,"context_line":"        CONF.ldap.domain_specific_drivers_enabled"},{"line_number":59,"context_line":"        and not os.listdir(CONF.ldap.domain_config_dir))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_e20c9096","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":59},"updated":"2016-08-27 04:05:28.000000000","message":"need to beef this up a bit since that is what is returned to the user should they fail the doctor check","commit_id":"571ec77bdc28c2ee560c78542c3c2fb6fc3f638a"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4d6ef38e35fb934ed71455481228dc5c9f1f5a59","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"[ldap] domain specific configuration files exist."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_7a72fde4","line":61,"range":{"start_line":61,"start_character":21,"end_line":61,"end_character":52},"updated":"2016-09-09 20:30:03.000000000","message":"`keystone.conf [identity] domain_specific_drivers_enabled`","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4d6ef38e35fb934ed71455481228dc5c9f1f5a59","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"[ldap] domain specific configuration files exist."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_faf0cd68","line":61,"range":{"start_line":61,"start_character":68,"end_line":61,"end_character":72},"updated":"2016-09-09 20:30:03.000000000","message":"technically, set to true not TRUE","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"79b31a0d20281545a3dbc17907579d2d6538c9e7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"[ldap] domain specific configuration files exist."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_f9bee9fd","line":61,"range":{"start_line":61,"start_character":21,"end_line":61,"end_character":52},"in_reply_to":"9a89bdaa_7a72fde4","updated":"2016-09-12 11:41:12.000000000","message":"++","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"79b31a0d20281545a3dbc17907579d2d6538c9e7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"[ldap] domain specific configuration files exist."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_39e9311b","line":61,"range":{"start_line":61,"start_character":68,"end_line":61,"end_character":72},"in_reply_to":"9a89bdaa_8204987e","updated":"2016-09-12 11:41:12.000000000","message":"this is conf a file, any positive value should be fine. Although \"true\" is better for consistency.","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":21513,"name":"lixinhu","email":"lixinhu@inspur.com","username":"lixinhu"},"change_message_id":"1b78075ffcb48d8c8a38da36b42f31fc8ab51dd7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \"\"\"[ldap] domain specific configuration files exist."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_8204987e","line":61,"range":{"start_line":61,"start_character":68,"end_line":61,"end_character":72},"in_reply_to":"9a89bdaa_faf0cd68","updated":"2016-09-12 07:41:06.000000000","message":"in my opinion，to True better then true，besides, why the author use the capital form of the word. The python programmer is True.","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"79b31a0d20281545a3dbc17907579d2d6538c9e7","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_99123d08","line":62,"range":{"start_line":62,"start_character":14,"end_line":62,"end_character":22},"updated":"2016-09-12 11:41:12.000000000","message":"s/Keystone/keystone\n\ntake a look at https://governance.openstack.org/reference/service-project-naming.html#service-name-guidelines","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"79b31a0d20281545a3dbc17907579d2d6538c9e7","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    If you are wanting to specify identity driver configurations on a domain"},{"line_number":61,"context_line":"    by domain basis, domain_specific_drivers_enabled must be set to TRUE."},{"line_number":62,"context_line":"    Likewise, Keystone will look in the directory provided in"},{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_7982d901","line":63,"range":{"start_line":63,"start_character":4,"end_line":63,"end_character":26},"updated":"2016-09-12 11:41:12.000000000","message":"`[identity] domain_config_dir`","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4c2902277d47f0cc6fec6a11d55a2e2f1f009853","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    ldap_domain_config_dir for any configuration files in the form of"},{"line_number":64,"context_line":"    keystone.\u003cdomain_name\u003e.conf."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    return ("},{"line_number":68,"context_line":"        CONF.ldap.domain_specific_drivers_enabled"},{"line_number":69,"context_line":"        and not os.listdir(CONF.ldap.domain_config_dir))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_8eae7096","line":66,"updated":"2016-09-12 12:38:17.000000000","message":"This comment should really describe what/why they check is being made. After reading it I\u0027m not really sure what the point of the check is, but the code implies \"If you have [setting] on then your [setting] directory must exist and not be empty.\"\n\nAdditionally, should this check the format of the files?","commit_id":"eb8e075c722b6978cfbecd6afbac735d459b945b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e9077e83ddab0a56bff86b27f2c1403ebdbb523c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":"from six.moves import configparser"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_cd5a1cf2","line":16,"updated":"2016-09-21 16:33:08.000000000","message":"There should be 3 separate import groupings here, each separated by a single newline. See http://docs.openstack.org/developer/hacking/#import-order-template for more info.","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"34821c56789151af8d8f406a2d6f4c1bffd36ccd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import os"},{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":"from six.moves import configparser"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_72fd59b0","line":16,"in_reply_to":"7a8ec9b2_cd5a1cf2","updated":"2016-09-21 20:49:37.000000000","message":"sure thing!","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e9077e83ddab0a56bff86b27f2c1403ebdbb523c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":112,"context_line":"            parser.read(filedir + \u0027/\u0027 + filename)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            for section in parser.sections():"},{"line_number":115,"context_line":"                parser.options(section)"},{"line_number":116,"context_line":"        except Exception as e:"},{"line_number":117,"context_line":"            print(e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_2849ae60","line":114,"updated":"2016-09-21 16:33:08.000000000","message":"Do you need this? Won\u0027t the read() actually catch parse errors?","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"34821c56789151af8d8f406a2d6f4c1bffd36ccd","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":112,"context_line":"            parser.read(filedir + \u0027/\u0027 + filename)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            for section in parser.sections():"},{"line_number":115,"context_line":"                parser.options(section)"},{"line_number":116,"context_line":"        except Exception as e:"},{"line_number":117,"context_line":"            print(e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_32f751d4","line":114,"in_reply_to":"7a8ec9b2_2849ae60","updated":"2016-09-21 20:49:37.000000000","message":"good catch. I was having issues with it not throwing an exception without trying to get an option but I ran it through again and it seems to work fine without this part.","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e9077e83ddab0a56bff86b27f2c1403ebdbb523c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            for section in parser.sections():"},{"line_number":115,"context_line":"                parser.options(section)"},{"line_number":116,"context_line":"        except Exception as e:"},{"line_number":117,"context_line":"            print(e)"},{"line_number":118,"context_line":"            return True"},{"line_number":119,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_8dcd7433","line":117,"updated":"2016-09-21 16:33:08.000000000","message":"It\u0027s probably worth adding a __future__ import for the print function. See keystone.cmd.cli for an example.","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"34821c56789151af8d8f406a2d6f4c1bffd36ccd","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            for section in parser.sections():"},{"line_number":115,"context_line":"                parser.options(section)"},{"line_number":116,"context_line":"        except Exception as e:"},{"line_number":117,"context_line":"            print(e)"},{"line_number":118,"context_line":"            return True"},{"line_number":119,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_52005dab","line":117,"in_reply_to":"7a8ec9b2_8dcd7433","updated":"2016-09-21 20:49:37.000000000","message":"sure, thanks!","commit_id":"f7cc6214cfd7269200dbba95d03648f3de8e8936"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"02d95d7dc1b0e628792ce99f75bb1898570ad11c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":114,"context_line":"            parser.read(filedir + \u0027/\u0027 + filename)"},{"line_number":115,"context_line":"        except Exception as e:"},{"line_number":116,"context_line":"            print(e)"},{"line_number":117,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8ec9b2_e8225853","line":114,"range":{"start_line":114,"start_character":34,"end_line":114,"end_character":37},"updated":"2016-09-21 21:32:06.000000000","message":"I\u0027d much rather you used os.path.join()","commit_id":"52118bdf052701bad629716348f9542d82e689c9"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"02d95d7dc1b0e628792ce99f75bb1898570ad11c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":114,"context_line":"            parser.read(filedir + \u0027/\u0027 + filename)"},{"line_number":115,"context_line":"        except Exception as e:"},{"line_number":116,"context_line":"            print(e)"},{"line_number":117,"context_line":"            return True"},{"line_number":118,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8ec9b2_6869e88b","line":115,"range":{"start_line":115,"start_character":15,"end_line":115,"end_character":24},"updated":"2016-09-21 21:32:06.000000000","message":"I think ConfigParser.Error would be better here.","commit_id":"52118bdf052701bad629716348f9542d82e689c9"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"d9711c61bbf2d4a897a04b0a6f1b27b7e99f2824","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from six.moves import configparser"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d keystone.conf.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_9da0e3a7","line":20,"updated":"2016-09-22 04:12:43.000000000","message":"This line should be above the import of keystone.conf","commit_id":"79392436c52dac2821f045324722957d70406ecd"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"75f7cd67dc2729f5d2df25d6ae82605689c624eb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from six.moves import configparser"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d keystone.conf.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_843776af","line":20,"in_reply_to":"5a8bc5a2_9da0e3a7","updated":"2016-09-22 21:24:54.000000000","message":"ah ok, will do!","commit_id":"79392436c52dac2821f045324722957d70406ecd"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"d9711c61bbf2d4a897a04b0a6f1b27b7e99f2824","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    ..."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":105,"context_line":"    # (gagehugo) If domain_config_dir doesn\u0027t exist or is invalid, then there"},{"line_number":106,"context_line":"    # is no point in continuing with this test, the other symptom will catch"},{"line_number":107,"context_line":"    # this and report the issue."},{"line_number":108,"context_line":"    if not os.path.isdir(filedir):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_3df6efd7","line":105,"range":{"start_line":105,"start_character":6,"end_line":105,"end_character":16},"updated":"2016-09-22 04:12:43.000000000","message":"replace with NOTE(gagehugo):","commit_id":"79392436c52dac2821f045324722957d70406ecd"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"d9711c61bbf2d4a897a04b0a6f1b27b7e99f2824","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return False"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":114,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":115,"context_line":"        except configparser.Error as e:"},{"line_number":116,"context_line":"            print(e)"},{"line_number":117,"context_line":"            return True"},{"line_number":118,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_ddb34b09","line":117,"range":{"start_line":112,"start_character":0,"end_line":117,"end_character":23},"updated":"2016-09-22 04:12:43.000000000","message":"Because this function returns on exception, you might as well include the for statement instead the try-except block. Then you can do:\n\ntry:\n    for filename in os.listdir(filedir):\n        parser \u003d configparser.ConfigParser()\n        parser.read(os.path.join(filedir, filename))\nexcept configparser.Error as e:\n    print(e)\n    return True\nelse:\n    return False","commit_id":"79392436c52dac2821f045324722957d70406ecd"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"75f7cd67dc2729f5d2df25d6ae82605689c624eb","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return False"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":114,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":115,"context_line":"        except configparser.Error as e:"},{"line_number":116,"context_line":"            print(e)"},{"line_number":117,"context_line":"            return True"},{"line_number":118,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_044c4641","line":117,"range":{"start_line":112,"start_character":0,"end_line":117,"end_character":23},"in_reply_to":"5a8bc5a2_ddb34b09","updated":"2016-09-22 21:24:54.000000000","message":"interesting, thanks!","commit_id":"79392436c52dac2821f045324722957d70406ecd"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"5c5dd99122829b20d009ca340fdf0175672c73d7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    ..."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":105,"context_line":"    # NOTE(gagehugo) If the value set in domain_config_dir doesn\u0027t exist or"},{"line_number":106,"context_line":"    # is invalid, then there is no point in continuing with this test. The"},{"line_number":107,"context_line":"    # other domain config symptom will catch and report the issue."},{"line_number":108,"context_line":"    if not os.path.isdir(filedir):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_f141d93a","line":105,"updated":"2016-09-22 23:30:17.000000000","message":"Nit: Should be a : after the )","commit_id":"2baea88ce358f3b4bd30d00298b03eb9e633bb80"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"abeadeb679eef2feb59c596e3b60a94f4e4e837c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set domain_specific_drivers_enabled to True, then we would"},{"line_number":66,"context_line":"    expect you to have domain specific configuration files located in the"},{"line_number":67,"context_line":"    directory specified by keystone.conf: [identity] domain_config_dir."},{"line_number":68,"context_line":"    These files located in the directory specified should be in the form of"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_b23498fb","line":65,"range":{"start_line":65,"start_character":20,"end_line":65,"end_character":51},"updated":"2016-09-23 11:50:25.000000000","message":"`keystone.conf [identity] domain_specific_drivers_enabled`","commit_id":"eb1daf217c4d5586a8dd02aeb372e1751c2f120d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"abeadeb679eef2feb59c596e3b60a94f4e4e837c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set domain_specific_drivers_enabled to True, then we would"},{"line_number":66,"context_line":"    expect you to have domain specific configuration files located in the"},{"line_number":67,"context_line":"    directory specified by keystone.conf: [identity] domain_config_dir."},{"line_number":68,"context_line":"    These files located in the directory specified should be in the form of"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_52827495","line":65,"range":{"start_line":65,"start_character":55,"end_line":65,"end_character":59},"updated":"2016-09-23 11:50:25.000000000","message":"s/True/true","commit_id":"eb1daf217c4d5586a8dd02aeb372e1751c2f120d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"abeadeb679eef2feb59c596e3b60a94f4e4e837c","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set domain_specific_drivers_enabled to True, then we would"},{"line_number":66,"context_line":"    expect you to have domain specific configuration files located in the"},{"line_number":67,"context_line":"    directory specified by keystone.conf: [identity] domain_config_dir."},{"line_number":68,"context_line":"    These files located in the directory specified should be in the form of"},{"line_number":69,"context_line":"    keystone.\u003cdomain_name\u003e.conf. The configuration directory either does not"},{"line_number":70,"context_line":"    exist or the directory contains incorrectly named files."}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_3dabf9d7","line":67,"range":{"start_line":67,"start_character":27,"end_line":67,"end_character":70},"updated":"2016-09-23 11:50:25.000000000","message":"`keystone.conf [identity] domain_config_dir`","commit_id":"eb1daf217c4d5586a8dd02aeb372e1751c2f120d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"abeadeb679eef2feb59c596e3b60a94f4e4e837c","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    If you have enabled ldap domain specific drivers, then we would assume"},{"line_number":90,"context_line":"    that there are separate configuration files located in the directory"},{"line_number":91,"context_line":"    specified by keystone.conf: [identity] domain_config_dir. These files"},{"line_number":92,"context_line":"    should be in the form of keystone.\u003cdomain_name\u003e.conf and should"},{"line_number":93,"context_line":"    be in the correct format. Ex:"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_7db5812f","line":91,"range":{"start_line":91,"start_character":17,"end_line":91,"end_character":60},"updated":"2016-09-23 11:50:25.000000000","message":"`keystone.conf [identity] domain_config_dir`","commit_id":"eb1daf217c4d5586a8dd02aeb372e1751c2f120d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"564b89db155ad40861744e203f27f0b4c341cee7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from __future__ import print_function"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_639f84b4","line":13,"updated":"2016-10-06 15:33:26.000000000","message":"I don\u0027t think this is used anywhere.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"e6b95b96fbae10364eac97a1141fff0a937682db","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from __future__ import print_function"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_63bdadb6","line":13,"in_reply_to":"1a95cdbc_639f84b4","updated":"2016-10-06 23:17:03.000000000","message":"dstanek mentioned adding this in a previous comment, it seems like this should be there for the print statement used in\n\nsymptom_LDAP_domain_specific_configs_formatted_correctly\n\nunless I\u0027m mistaken","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08149b25003cbe1534059df0a22da1ad43fae01f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from __future__ import print_function"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa6399be_7c7303e8","line":13,"in_reply_to":"1a95cdbc_63bdadb6","updated":"2016-10-17 21:32:40.000000000","message":"Ah ha - makes sense. Thanks!","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"564b89db155ad40861744e203f27f0b4c341cee7","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set `keystone.conf [identity] domain_specific_drivers_enabled`"},{"line_number":66,"context_line":"    to true, then we would expect you to have domain specific configuration"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_58f27370","line":63,"updated":"2016-10-06 15:33:26.000000000","message":"According to the convention in this file - we should have backticks around literals.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"e6b95b96fbae10364eac97a1141fff0a937682db","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set `keystone.conf [identity] domain_specific_drivers_enabled`"},{"line_number":66,"context_line":"    to true, then we would expect you to have domain specific configuration"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_a3b335e8","line":63,"in_reply_to":"1a95cdbc_58f27370","updated":"2016-10-06 23:17:03.000000000","message":"whoops, will fix this","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"564b89db155ad40861744e203f27f0b4c341cee7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set `keystone.conf [identity] domain_specific_drivers_enabled`"},{"line_number":66,"context_line":"    to true, then we would expect you to have domain specific configuration"},{"line_number":67,"context_line":"    files located in the directory specified by"},{"line_number":68,"context_line":"    `keystone.conf [identity] domain_config_dir`."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_3813e7b9","line":65,"updated":"2016-10-06 15:33:26.000000000","message":"nit: \n\n  `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"cb2cd2ee4d918becd7317b38332fdb1e3a4cd723","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set `keystone.conf [identity] domain_specific_drivers_enabled`"},{"line_number":66,"context_line":"    to true, then we would expect you to have domain specific configuration"},{"line_number":67,"context_line":"    files located in the directory specified by"},{"line_number":68,"context_line":"    `keystone.conf [identity] domain_config_dir`."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_b4bfbba8","line":65,"in_reply_to":"1a95cdbc_3813e7b9","updated":"2016-10-08 03:42:03.000000000","message":"Technically, in the conf file it would be \"true\" and in python would be \"True\". I assume this is referring to the conf file, no?","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08149b25003cbe1534059df0a22da1ad43fae01f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"[identity] domain specific configuration is enabled."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set `keystone.conf [identity] domain_specific_drivers_enabled`"},{"line_number":66,"context_line":"    to true, then we would expect you to have domain specific configuration"},{"line_number":67,"context_line":"    files located in the directory specified by"},{"line_number":68,"context_line":"    `keystone.conf [identity] domain_config_dir`."}],"source_content_type":"text/x-python","patch_set":11,"id":"fa6399be_1c3a07e8","line":65,"in_reply_to":"1a95cdbc_b4bfbba8","updated":"2016-10-17 21:32:40.000000000","message":"Correct - it should be `true`. Thanks, Eric.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"564b89db155ad40861744e203f27f0b4c341cee7","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def symptom_LDAP_domain_specific_configs_formatted_correctly():"},{"line_number":89,"context_line":"    \"\"\"[identity] domain specific configuration files not fomatted correctly."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    If you have enabled ldap domain specific drivers, then we would assume"},{"line_number":92,"context_line":"    that there are separate configuration files located in the directory"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_78e9ef7f","line":89,"updated":"2016-10-06 15:33:26.000000000","message":"According to the convention in this file - we should have backticks around literals.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"564b89db155ad40861744e203f27f0b4c341cee7","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def symptom_LDAP_domain_specific_configs_formatted_correctly():"},{"line_number":89,"context_line":"    \"\"\"[identity] domain specific configuration files not fomatted correctly."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    If you have enabled ldap domain specific drivers, then we would assume"},{"line_number":92,"context_line":"    that there are separate configuration files located in the directory"},{"line_number":93,"context_line":"    specified by `keystone.conf [identity] domain_config_dir`. These files"},{"line_number":94,"context_line":"    should be in the form of keystone.\u003cdomain_name\u003e.conf and should"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_b88a97bd","line":91,"updated":"2016-10-06 15:33:26.000000000","message":"This could be replace with the exact configuration option needed to enable ldap domain specific drivers.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"323a1db83fdaffe83b7ec13e3d7d73727ae44553","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":107,"context_line":"    # NOTE(gagehugo): If the value set in domain_config_dir doesn\u0027t exist or"},{"line_number":108,"context_line":"    # is invalid, then there is no point in continuing with this test. The"},{"line_number":109,"context_line":"    # other domain config symptom will catch and report the issue."},{"line_number":110,"context_line":"    if not os.path.isdir(filedir):"},{"line_number":111,"context_line":"        return False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_e4f22b6f","line":109,"range":{"start_line":108,"start_character":71,"end_line":109,"end_character":66},"updated":"2016-10-04 16:04:47.000000000","message":"I think you mean to say symptom_LDAP_domain_specific_configs would report the other issue, but this gets confusing by just saying \"other\" since there are multiple other symptom checks in this module.","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"e6b95b96fbae10364eac97a1141fff0a937682db","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":107,"context_line":"    # NOTE(gagehugo): If the value set in domain_config_dir doesn\u0027t exist or"},{"line_number":108,"context_line":"    # is invalid, then there is no point in continuing with this test. The"},{"line_number":109,"context_line":"    # other domain config symptom will catch and report the issue."},{"line_number":110,"context_line":"    if not os.path.isdir(filedir):"},{"line_number":111,"context_line":"        return False"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_c8e93ee8","line":109,"range":{"start_line":108,"start_character":71,"end_line":109,"end_character":66},"in_reply_to":"1a95cdbc_e4f22b6f","updated":"2016-10-06 23:17:03.000000000","message":"Sure, I\u0027ll make it more specific","commit_id":"2e514d4ee8e2a8ad8d16346b3fdc34a575373654"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    \"\"\"`[identity] domain_specific_drivers_enabled` is set to true."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`,"},{"line_number":67,"context_line":"    then we would expect you to have domain specific configuration"},{"line_number":68,"context_line":"    files located in the directory specified by"},{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_94f0ff92","line":66,"range":{"start_line":66,"start_character":64,"end_line":66,"end_character":68},"updated":"2016-10-08 03:41:57.000000000","message":"Here you have \"True\", but above you have \"true\". Inconsistent at least, but when referring to conf files, I would expect \"true\" not \"True\" (which is for Python).","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`,"},{"line_number":67,"context_line":"    then we would expect you to have domain specific configuration"},{"line_number":68,"context_line":"    files located in the directory specified by"},{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_544117a8","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":28},"updated":"2016-10-08 03:41:57.000000000","message":"rather say, \"keystone expects...\" and not use \"we\"","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    files located in the directory specified by"},{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    These files located in the directory specified should be in the form of"},{"line_number":72,"context_line":"    keystone.\u003cdomain_name\u003e.conf. The configuration directory specified either"},{"line_number":73,"context_line":"    does not exist or contains incorrectly named files."},{"line_number":74,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_743e1329","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":9},"updated":"2016-10-08 03:41:57.000000000","message":"The","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    These files located in the directory specified should be in the form of"},{"line_number":72,"context_line":"    keystone.\u003cdomain_name\u003e.conf. The configuration directory specified either"},{"line_number":73,"context_line":"    does not exist or contains incorrectly named files."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_f41863d5","line":73,"range":{"start_line":72,"start_character":33,"end_line":73,"end_character":55},"updated":"2016-10-08 03:41:57.000000000","message":"I think you need to state something like, this leads to an error.","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def symptom_LDAP_domain_specific_configs_formatted_correctly():"},{"line_number":90,"context_line":"    \"\"\"LDAP domain specific configuration files are not fomatted correctly."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    If you have set"},{"line_number":93,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_d4de0710","line":90,"range":{"start_line":90,"start_character":56,"end_line":90,"end_character":64},"updated":"2016-10-08 03:41:57.000000000","message":"formatted","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\"LDAP domain specific configuration files are not fomatted correctly."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    If you have set"},{"line_number":93,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`,"},{"line_number":94,"context_line":"    then we would expect you to have domain specific configuration"},{"line_number":95,"context_line":"    files located in the directory specified by"},{"line_number":96,"context_line":"    `keystone.conf [identity] domain_config_dir`."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_340f2b89","line":93,"range":{"start_line":93,"start_character":64,"end_line":93,"end_character":68},"updated":"2016-10-08 03:41:57.000000000","message":"Same as above.","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    If you have set"},{"line_number":93,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d True`,"},{"line_number":94,"context_line":"    then we would expect you to have domain specific configuration"},{"line_number":95,"context_line":"    files located in the directory specified by"},{"line_number":96,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_140a2f79","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":24},"updated":"2016-10-08 03:41:57.000000000","message":"Same as above.","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    ..."},{"line_number":109,"context_line":"    \"\"\""},{"line_number":110,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":111,"context_line":"    # NOTE(gagehugo): If domain_specific_drivers_enabled \u003d False or"},{"line_number":112,"context_line":"    # the value set in domain_config_dir is nonexistant/invalid, then"},{"line_number":113,"context_line":"    # there is no point in continuing with this test."},{"line_number":114,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_f47f83dd","line":111,"range":{"start_line":111,"start_character":25,"end_line":111,"end_character":64},"updated":"2016-10-08 03:41:57.000000000","message":"`keystone.conf [identity] domain_specific_drivers_enabled \u003d false`","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":111,"context_line":"    # NOTE(gagehugo): If domain_specific_drivers_enabled \u003d False or"},{"line_number":112,"context_line":"    # the value set in domain_config_dir is nonexistant/invalid, then"},{"line_number":113,"context_line":"    # there is no point in continuing with this test."},{"line_number":114,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":115,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled or \\"},{"line_number":116,"context_line":"       not os.path.isdir(filedir):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_74253307","line":113,"range":{"start_line":113,"start_character":48,"end_line":113,"end_character":52},"updated":"2016-10-08 03:41:57.000000000","message":"check","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bb51e20ee911e8a1ef67dfa515a8c8d354bd7ff8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    # the value set in domain_config_dir is nonexistant/invalid, then"},{"line_number":113,"context_line":"    # there is no point in continuing with this test."},{"line_number":114,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":115,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled or \\"},{"line_number":116,"context_line":"       not os.path.isdir(filedir):"},{"line_number":117,"context_line":"            return False"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_f4e303d7","line":116,"range":{"start_line":115,"start_character":6,"end_line":116,"end_character":34},"updated":"2016-10-08 03:41:57.000000000","message":"Avoid using \\. Simply use ( ) in this case.","commit_id":"400394611f30894178d28851f33e5d279dd61af7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"887e1733d4d0069e8fb85e350e77e75fe7e7cb1e","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d true`,"},{"line_number":67,"context_line":"    then keystone expect you to have domain specific configuration"},{"line_number":68,"context_line":"    files located in the directory specified by"},{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_21f9fe4d","line":67,"range":{"start_line":67,"start_character":18,"end_line":67,"end_character":24},"updated":"2016-10-13 05:24:14.000000000","message":"expects","commit_id":"1cfaf84441fb3bee38157fce4c9f83cf2ba3552a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"874e2e364cf4ed6e9a550efc22a098b2e2b3b534","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    if os.path.isdir(filedir):"},{"line_number":80,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":81,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":82,"context_line":"                return True"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        return True"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_d391f953","line":82,"range":{"start_line":82,"start_character":16,"end_line":82,"end_character":27},"updated":"2016-10-13 05:51:38.000000000","message":"since this is a loop, it would actually be more user friendly to have a running list of invalid filenames, when you are done iterating, print all of them out to the user, and then return True.\n\nBy returning true on the first match, the user will have to re-run doctor for N invalid files.","commit_id":"1cfaf84441fb3bee38157fce4c9f83cf2ba3552a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"874e2e364cf4ed6e9a550efc22a098b2e2b3b534","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":82,"context_line":"                return True"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        return True"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    return False"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_1369b18b","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":19},"updated":"2016-10-13 05:51:38.000000000","message":"if you\u0027re going to print stuff, maybe add here:\n\n  print(\u0027Could not find directory %s\u0027 % filedir)","commit_id":"1cfaf84441fb3bee38157fce4c9f83cf2ba3552a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"874e2e364cf4ed6e9a550efc22a098b2e2b3b534","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        return True"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    return False"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def symptom_LDAP_domain_specific_configs_formatted_correctly():"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_f3219dfc","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":16},"updated":"2016-10-13 05:51:38.000000000","message":"combining the two suggestions would look like:\n\n    if not CONF.identity.domain_specific_drivers_enabled:\n        return False\n\n    invalid_files \u003d []\n    filedir \u003d CONF.identity.domain_config_dir\n    if os.path.isdir(filedir):\n        for filename in os.listdir(filedir):\n            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):\n                invalid_files.append(filename)\n            if invalid_files:\n                invalid_str \u003d \u0027, \u0027.join(invalid_files)\n                print(\u0027the following files are named incorrectly: %s they \u0027\n                      \u0027should be follow the pattern of \u0027\n                      \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)\n                return True\n    else:\n        print(\u0027Could not find directory %s\u0027 % filedir)\n        return True\n\n    return False","commit_id":"1cfaf84441fb3bee38157fce4c9f83cf2ba3552a"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e5a59f38bbc6bc63646b9e964d0d665cd0f2003b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":124,"context_line":"            not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"            return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_c4727fb0","line":125,"updated":"2016-10-17 16:50:21.000000000","message":"Too much indentation","commit_id":"e00b14e9cbcec25b11134464f7d7137131cb5f29"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"38dbe9a50733c51daae8d3707228211efae2e2d6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":124,"context_line":"       not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"            return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_bab846ea","line":125,"updated":"2016-10-17 17:34:12.000000000","message":"Actually is the indentation of the return statement that is too much.","commit_id":"83d54a0402a394068bf68242d00a84ccdefda6bd"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"17f1382e5b84ff5a1b06a7e6a4c84c8db51eb3b3","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":124,"context_line":"       not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"            return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_d5294bf4","line":125,"in_reply_to":"fa6399be_bab846ea","updated":"2016-10-17 18:01:07.000000000","message":"pep8 fails if it\u0027s reduced, the if can be like this or the previous version","commit_id":"83d54a0402a394068bf68242d00a84ccdefda6bd"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"ae1306353ee00c70f48d28d831dc8e7c2686de3c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    # there is no point in continuing with this check."},{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":124,"context_line":"       not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa6399be_d0ceb9b6","line":124,"updated":"2016-10-17 18:16:16.000000000","message":"So you\u0027ll want to tab over twice from under the if to satisfy pep8/pylint","commit_id":"ce4e21461bdc45ab68681345652c0496cbf49b79"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67d1a022cdfd27f1ea9246f0bc4b0797b412a01e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory %s\u0027 % filedir)"},{"line_number":92,"context_line":"        return True"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_eb2e6ef9","line":91,"updated":"2016-10-17 18:44:30.000000000","message":"(nit) you don\u0027t need to do the % operation here. print() will print all *args passed to it separated by a space.","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67d1a022cdfd27f1ea9246f0bc4b0797b412a01e","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":129,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":130,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":131,"context_line":"    except configparser.Error as e:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_0b0ba27e","line":128,"updated":"2016-10-17 18:44:30.000000000","message":"Is there any reason you don\u0027t check all the files if you do for the filename?","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"dc744bc7bc44598093760b1280ef4c1a1ece2850","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":129,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":130,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":131,"context_line":"    except configparser.Error as e:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_e650630d","line":128,"in_reply_to":"fa6399be_0b0ba27e","updated":"2016-10-17 18:52:41.000000000","message":"This should probably be changed to add to a list like what stevemar suggested for the other check","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ec0250d2bf9c6f9e0c2ee2980cdb181baa4f19a6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    try:"},{"line_number":128,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":129,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":130,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":131,"context_line":"    except configparser.Error as e:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_4bb837e6","line":128,"in_reply_to":"fa6399be_e650630d","updated":"2016-10-17 20:00:31.000000000","message":"++ exactly what i was thinking","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67d1a022cdfd27f1ea9246f0bc4b0797b412a01e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":130,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":131,"context_line":"    except configparser.Error as e:"},{"line_number":132,"context_line":"        print(e)"},{"line_number":133,"context_line":"        return True"},{"line_number":134,"context_line":"    else:"},{"line_number":135,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_6b225e03","line":132,"updated":"2016-10-17 18:44:30.000000000","message":"This probably deserves a better user facing error message.","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"dc744bc7bc44598093760b1280ef4c1a1ece2850","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":130,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":131,"context_line":"    except configparser.Error as e:"},{"line_number":132,"context_line":"        print(e)"},{"line_number":133,"context_line":"        return True"},{"line_number":134,"context_line":"    else:"},{"line_number":135,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_06563706","line":132,"in_reply_to":"fa6399be_6b225e03","updated":"2016-10-17 18:52:41.000000000","message":"will do","commit_id":"609031e4a6ef761b2a9bbab2cd489af8a6f2d1ef"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2b359de94814cf079214c7d7e85130fabe00624a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    \"\"\""},{"line_number":118,"context_line":"    filedir \u003d CONF.identity.domain_config_dir"},{"line_number":119,"context_line":"    # NOTE(gagehugo): If domain_specific_drivers_enabled \u003d false or"},{"line_number":120,"context_line":"    # the value set in domain_config_dir is nonexistant/invalid, then"},{"line_number":121,"context_line":"    # there is no point in continuing with this check."},{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa6399be_b73054ea","line":120,"updated":"2016-10-17 21:36:54.000000000","message":"nonexistent*","commit_id":"c4b07f3976e4adce7b86379f672b4fb0dcd20ee4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ca29afb292b60b5f1920b3e964306e832b9bf280","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":73,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_9dd17cfe","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":56},"updated":"2016-10-19 04:39:37.000000000","message":"This check on it\u0027s own isn\u0027t enough, since if domain_configurations_from_database is set as well, then we aren\u0027t using files","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"89b55426ca91684901a12e56f8f833f35f6b65ff","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":73,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_c5e05dfd","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":56},"in_reply_to":"fa6399be_9dd17cfe","updated":"2016-10-19 14:45:12.000000000","message":"Good catch Henry","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ad684a131553fbe7794ff45d479a31629064d8cb","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":73,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_f88b6666","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":56},"in_reply_to":"fa6399be_9dd17cfe","updated":"2016-10-19 04:52:26.000000000","message":"so add:\n\n  if not CONF.identity. domain_configurations_from_database:\n        return False\n\nbelow?","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"c634fb1d56eec73beee978c4c4fc0212a78c96ff","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":73,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_582199fa","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":56},"in_reply_to":"fa6399be_b3fe6c03","updated":"2016-10-19 14:12:35.000000000","message":"will do!","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dff9f23c8eb21b3ec10302bd71f48a1d0ba03b15","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":73,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_b3fe6c03","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":56},"in_reply_to":"fa6399be_f88b6666","updated":"2016-10-19 06:57:10.000000000","message":"yep","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ca29afb292b60b5f1920b3e964306e832b9bf280","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_5d0fe4e0","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"updated":"2016-10-19 04:39:37.000000000","message":"So, the real keystone code that reads these configs correctly ignores files not in the correct format - it\u0027s fine to have other files in there (e.g. a README or something). However, I think what you are trying to warn people about is that maybe they meant for a file to be a config, but names it wrong? So maybe the error should be a warning to say something like did you mean these files to be config files, if so you should rename them to be keystone.\u003cdomain_name\u003e.conf","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"c634fb1d56eec73beee978c4c4fc0212a78c96ff","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_d883e9ca","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_130c783a","updated":"2016-10-19 14:12:35.000000000","message":"ah, makes sense, I\u0027ll fix this then","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dff9f23c8eb21b3ec10302bd71f48a1d0ba03b15","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_130c783a","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_3885de58","updated":"2016-10-19 06:57:10.000000000","message":"perfect","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"44af7a6f1d4930d33646215e3885fc904f9a26e9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_ef8457b2","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_45a9ad7a","updated":"2016-10-19 18:09:55.000000000","message":"that is what the check below looks for","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ad684a131553fbe7794ff45d479a31629064d8cb","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_3885de58","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_5d0fe4e0","updated":"2016-10-19 04:52:26.000000000","message":"That sounds reasonable, something like:\n\n\"Warning: The following non-config files were found. If they are intended to be config files then rename them to the form of `keystone.\u003cdomain_name\u003e.conf`. Otherwise, ignore this warning\"","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"89b55426ca91684901a12e56f8f833f35f6b65ff","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_45a9ad7a","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_5d0fe4e0","updated":"2016-10-19 14:45:12.000000000","message":"Wouldn\u0027t you also want to make sure the configs are the correct ini format too? So you would scan all files and if they fail validation and use k.\u003cd\u003e.conf as the name it\u0027s an error....or if it is valid ini and does not have that name it\u0027s also an error?","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"34cbe2ad4435cd0e972c0003a35af7be416383c8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        for filename in os.listdir(filedir):"},{"line_number":82,"context_line":"            if not re.match(\u0027^keystone\\..*?\\.conf$\u0027, filename):"},{"line_number":83,"context_line":"                invalid_files.append(filename)"},{"line_number":84,"context_line":"        if invalid_files:"},{"line_number":85,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":86,"context_line":"            print(\u0027Error: The following files are named incorrectly:\\n\u0027"},{"line_number":87,"context_line":"                  \u0027%s\\nThey should match the pattern of \u0027"},{"line_number":88,"context_line":"                  \u0027keystone.\u003cdomain_name\u003e.conf\u0027 % invalid_str)"},{"line_number":89,"context_line":"            return True"},{"line_number":90,"context_line":"    else:"},{"line_number":91,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"},{"line_number":92,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_d2681abd","line":89,"range":{"start_line":84,"start_character":0,"end_line":89,"end_character":23},"in_reply_to":"fa6399be_ef8457b2","updated":"2016-10-19 18:15:10.000000000","message":"Yeah, I re-read this in context. I was thinking that the negative testing would replace the other test. We definitely need both.","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ca29afb292b60b5f1920b3e964306e832b9bf280","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    # the value set in domain_config_dir is nonexistent/invalid, then"},{"line_number":121,"context_line":"    # there is no point in continuing with this check."},{"line_number":122,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":123,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":124,"context_line":"            not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_1d048c7c","line":123,"range":{"start_line":123,"start_character":18,"end_line":123,"end_character":57},"updated":"2016-10-19 04:39:37.000000000","message":"This check on it\u0027s own isn\u0027t enough, since if domain_configurations_from_database is set as well, then we aren\u0027t using files","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"acbfc5d94090e6da387e39d029442ba38462098d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            not os.path.isdir(filedir)):"},{"line_number":125,"context_line":"        return False"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    invalid_files \u003d []"},{"line_number":128,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":129,"context_line":"        try:"},{"line_number":130,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":131,"context_line":"            parser.read(os.path.join(filedir, filename))"},{"line_number":132,"context_line":"        except configparser.Error:"},{"line_number":133,"context_line":"            invalid_files.append(filename)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    if invalid_files:"},{"line_number":136,"context_line":"        invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":137,"context_line":"        print(\u0027Error: The following files are formatted incorrectly:\\n\u0027,"},{"line_number":138,"context_line":"              invalid_str)"},{"line_number":139,"context_line":"        return True"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_5320b39b","line":138,"range":{"start_line":127,"start_character":4,"end_line":138,"end_character":26},"updated":"2016-10-19 05:15:23.000000000","message":"great addition","commit_id":"76d3345d71c37c459c9b477c437485c7790139fb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"25760e1855f8dba7a0296bf7dd6df8344a929be0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    if not CONF.identity.domain_configurations_from_database:"},{"line_number":79,"context_line":"        return False"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa6399be_e03c64c1","line":78,"updated":"2016-10-19 19:20:47.000000000","message":"Is this saying that if the config is not coming from the database that we should bail? Isn\u0027t that the case where we actually want to do the check?","commit_id":"38d38e7fc3e550f7093c82053c160dd651b7a5f2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"894141d58ba85d6b429747764fe1e3cbabcfeb05","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    if not CONF.identity.domain_configurations_from_database:"},{"line_number":79,"context_line":"        return False"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa6399be_a601a46c","line":78,"in_reply_to":"fa6399be_7b09e92b","updated":"2016-10-19 20:45:14.000000000","message":"yes, remove the \"not\".  If the configs are in the DB, then there are things you can check....(e.g. maybe is the url reachable?)...but I\u0027d create a separate method for that (maybe even in a separate patch?)","commit_id":"38d38e7fc3e550f7093c82053c160dd651b7a5f2"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"91b9409ead97a6f652dee9a218eae1ab11a7a4ba","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    if not CONF.identity.domain_specific_drivers_enabled:"},{"line_number":76,"context_line":"        return False"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    if not CONF.identity.domain_configurations_from_database:"},{"line_number":79,"context_line":"        return False"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    invalid_files \u003d []"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa6399be_7b09e92b","line":78,"in_reply_to":"fa6399be_e03c64c1","updated":"2016-10-19 19:51:01.000000000","message":"yeah, I think the not needs to be removed, if the configs are in the DB then we do not want to check?","commit_id":"38d38e7fc3e550f7093c82053c160dd651b7a5f2"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"01f85bd75218cfbd4dfd18a59b3ae0a1cc6c3ae7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                invalid_files.append(filename)"},{"line_number":87,"context_line":"        if invalid_files:"},{"line_number":88,"context_line":"            invalid_str \u003d \u0027, \u0027.join(invalid_files)"},{"line_number":89,"context_line":"            print(\u0027Warning: The following non-config files were found:\\n\u0027"},{"line_number":90,"context_line":"                  \u0027%s\\n. If they are intended to be config files then rename \u0027"},{"line_number":91,"context_line":"                  \u0027them to the form of `keystone.\u003cdomain_name\u003e.conf`. \u0027"},{"line_number":92,"context_line":"                  \u0027Otherwise, ignore this warning\u0027 % invalid_str)"},{"line_number":93,"context_line":"            return True"},{"line_number":94,"context_line":"    else:"},{"line_number":95,"context_line":"        print(\u0027Could not find directory \u0027, filedir)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa6399be_3572204a","line":92,"range":{"start_line":89,"start_character":18,"end_line":92,"end_character":49},"updated":"2016-10-19 18:56:50.000000000","message":"looks good to me","commit_id":"38d38e7fc3e550f7093c82053c160dd651b7a5f2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9608ea655ff6f9ce68eafc093f42acbec10e2fc2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        and not CONF.ldap.group_members_are_ids)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def symptom_LDAP_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"`[identity] domain_specific_drivers_enabled` is set to true."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_c7f4cfd0","line":62,"range":{"start_line":62,"start_character":12,"end_line":62,"end_character":40},"updated":"2016-10-20 01:34:03.000000000","message":"maybe make this function name unique to the file-based config setup","commit_id":"c2d1690ce7d1eea935bc285ac375f592443fb16e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9608ea655ff6f9ce68eafc093f42acbec10e2fc2","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d true`,"},{"line_number":67,"context_line":"    then keystone expects you to have domain specific configuration"},{"line_number":68,"context_line":"    files located in the directory specified by"},{"line_number":69,"context_line":"    `keystone.conf [identity] domain_config_dir`."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    Error: The configuration directory specified either does not exist or"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_07688786","line":68,"range":{"start_line":67,"start_character":4,"end_line":68,"end_character":47},"updated":"2016-10-20 01:34:03.000000000","message":"this should be updated to also explain that if the configs are coming from the database, then no work to do here.","commit_id":"c2d1690ce7d1eea935bc285ac375f592443fb16e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9608ea655ff6f9ce68eafc093f42acbec10e2fc2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    return False"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def symptom_LDAP_domain_specific_configs_formatted_correctly():"},{"line_number":102,"context_line":"    \"\"\"LDAP domain specific configuration files are not formatted correctly."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    If you have set"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_472fdf3d","line":101,"range":{"start_line":101,"start_character":12,"end_line":101,"end_character":60},"updated":"2016-10-20 01:34:03.000000000","message":"maybe make this name specific to file-based config setup","commit_id":"c2d1690ce7d1eea935bc285ac375f592443fb16e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9608ea655ff6f9ce68eafc093f42acbec10e2fc2","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    # the value set in domain_config_dir is nonexistent/invalid, then"},{"line_number":125,"context_line":"    # there is no point in continuing with this check."},{"line_number":126,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":127,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":128,"context_line":"            not os.path.isdir(filedir)):"},{"line_number":129,"context_line":"        return False"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_07ffa7aa","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":57},"updated":"2016-10-20 01:34:03.000000000","message":"again, need to check if we are getting the config from the DB or not","commit_id":"c2d1690ce7d1eea935bc285ac375f592443fb16e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ffb5a0f8dd82e3a1fc2f13b08dc348a5be14d47","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def symptom_LDAP_file_based_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"`[identity] domain_specific_drivers_enabled` is set to true."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d true`,"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_3d59655b","line":63,"range":{"start_line":63,"start_character":19,"end_line":63,"end_character":66},"updated":"2016-10-22 09:05:07.000000000","message":"this line isn\u0027t strictly true, since that doesn\u0027t account for what you have written below","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"2baae1b7aaf7b2e3065e5bce531ef31f06b06587","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def symptom_LDAP_file_based_domain_specific_configs():"},{"line_number":63,"context_line":"    \"\"\"`[identity] domain_specific_drivers_enabled` is set to true."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    If you have set"},{"line_number":66,"context_line":"    `keystone.conf [identity] domain_specific_drivers_enabled \u003d true`,"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_e5e74f10","line":63,"range":{"start_line":63,"start_character":19,"end_line":63,"end_character":66},"in_reply_to":"da6895a0_3d59655b","updated":"2016-10-22 22:20:49.000000000","message":"ok, I\u0027ll change it to be clearer","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ffb5a0f8dd82e3a1fc2f13b08dc348a5be14d47","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    However, if you have set"},{"line_number":72,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":73,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":74,"context_line":"    than separate files, then you can ignore this message."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Error: The configuration directory specified either does not exist or"},{"line_number":77,"context_line":"    contains incorrectly named files. The files located in the directory"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_1d5ca14a","line":74,"range":{"start_line":74,"start_character":25,"end_line":74,"end_character":57},"updated":"2016-10-22 09:05:07.000000000","message":"well, I don\u0027t think there will be a message, since the check below will catch this and we won\u0027t run the test (which is correct)","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"2baae1b7aaf7b2e3065e5bce531ef31f06b06587","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    However, if you have set"},{"line_number":72,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":73,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":74,"context_line":"    than separate files, then you can ignore this message."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Error: The configuration directory specified either does not exist or"},{"line_number":77,"context_line":"    contains incorrectly named files. The files located in the directory"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_05e52308","line":74,"range":{"start_line":74,"start_character":25,"end_line":74,"end_character":57},"in_reply_to":"da6895a0_1d5ca14a","updated":"2016-10-22 22:20:49.000000000","message":"good point","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ffb5a0f8dd82e3a1fc2f13b08dc348a5be14d47","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":73,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":74,"context_line":"    than separate files, then you can ignore this message."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Error: The configuration directory specified either does not exist or"},{"line_number":77,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":78,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_3d308501","line":75,"updated":"2016-10-22 09:05:07.000000000","message":"Suggestion: for clarity, maybe try combining the above two paragraphs, e.g.\n\nIf `keystone.conf [identity] domain_specific_drivers_enabled` is set to  `true` then support is enabled for individual domains to have their own identity drivers. The configurations for these can either be stored in a config file or in the database. The case we handle in this symptom is when they are stored in config files, which is indicated by `keystone.conf [identity]domain_configurations_from_database` being set to  `false`.","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"2baae1b7aaf7b2e3065e5bce531ef31f06b06587","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":73,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":74,"context_line":"    than separate files, then you can ignore this message."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Error: The configuration directory specified either does not exist or"},{"line_number":77,"context_line":"    contains incorrectly named files. The files located in the directory"},{"line_number":78,"context_line":"    specified should be in the form of keystone.\u003cdomain_name\u003e.conf."}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_25f227d3","line":75,"in_reply_to":"da6895a0_3d308501","updated":"2016-10-22 22:20:49.000000000","message":"will do","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ffb5a0f8dd82e3a1fc2f13b08dc348a5be14d47","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    However, if you have set"},{"line_number":114,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":115,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":116,"context_line":"    than separate files, then you can ignore this message."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    The files should be in the form of keystone.\u003cdomain_name\u003e.conf and"},{"line_number":119,"context_line":"    their contents should look something like this:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_7d311d0b","line":116,"range":{"start_line":116,"start_character":25,"end_line":116,"end_character":58},"updated":"2016-10-22 09:05:07.000000000","message":"as above there, will be no message","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ffb5a0f8dd82e3a1fc2f13b08dc348a5be14d47","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    `keystone.conf [identity] domain_configurations_from_database \u003d true`,"},{"line_number":115,"context_line":"    and intend on storing the domain configurations in a database rather"},{"line_number":116,"context_line":"    than separate files, then you can ignore this message."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    The files should be in the form of keystone.\u003cdomain_name\u003e.conf and"},{"line_number":119,"context_line":"    their contents should look something like this:"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_5d2d39a6","line":117,"updated":"2016-10-22 09:05:07.000000000","message":"as above, maybe consider combining these two paragraphs above","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fa0b5cfd3a0fa1ab9a94211e9d503e822f6fdec8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    # NOTE(gagehugo): If domain_specific_drivers_enabled \u003d false or"},{"line_number":132,"context_line":"    # the value set in domain_config_dir is nonexistent/invalid, then"},{"line_number":133,"context_line":"    # there is no point in continuing with this check."},{"line_number":134,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":135,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":136,"context_line":"            CONF.identity.domain_configurations_from_database or"},{"line_number":137,"context_line":"            not os.path.isdir(filedir)):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_98043f16","line":134,"range":{"start_line":134,"start_character":6,"end_line":134,"end_character":42},"updated":"2016-10-22 09:09:41.000000000","message":"does this exist yet? If not, then that\u0027s OK, but you should turn this into a TODO to say that we plan to write that in the future to cover that scenario.","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"2baae1b7aaf7b2e3065e5bce531ef31f06b06587","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    # NOTE(gagehugo): If domain_specific_drivers_enabled \u003d false or"},{"line_number":132,"context_line":"    # the value set in domain_config_dir is nonexistent/invalid, then"},{"line_number":133,"context_line":"    # there is no point in continuing with this check."},{"line_number":134,"context_line":"    # symptom_LDAP_domain_specific_configs will catch and report this issue."},{"line_number":135,"context_line":"    if (not CONF.identity.domain_specific_drivers_enabled or"},{"line_number":136,"context_line":"            CONF.identity.domain_configurations_from_database or"},{"line_number":137,"context_line":"            not os.path.isdir(filedir)):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_65ba5fe3","line":134,"range":{"start_line":134,"start_character":6,"end_line":134,"end_character":42},"in_reply_to":"da6895a0_98043f16","updated":"2016-10-22 22:20:49.000000000","message":"whoops, forgot to change this to be the test above","commit_id":"df13af76cb0ca87d40e9c4ae6db3237825be7661"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6827fe3fdd50130a40d846d657ec6adeca053ca1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        return False"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    invalid_files \u003d []"},{"line_number":132,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":135,"context_line":"            parser.read(os.path.join(filedir, filename))"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_71082c92","line":132,"range":{"start_line":132,"start_character":4,"end_line":132,"end_character":40},"updated":"2016-10-31 22:09:03.000000000","message":"just one comment here, we end up looping through all the files, which so even if theres a readme file we expect it to me in an ini format.\n\nwe should filter these by: ^keystone\\..*?\\.conf$\u0027 like we do above","commit_id":"fd6445ee0555cd26afd2f18adffda3c3c0379a42"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"8959f9afd4b67a60473832b352957c25c1091b85","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        return False"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    invalid_files \u003d []"},{"line_number":132,"context_line":"    for filename in os.listdir(filedir):"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            parser \u003d configparser.ConfigParser()"},{"line_number":135,"context_line":"            parser.read(os.path.join(filedir, filename))"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_7493ba4f","line":132,"range":{"start_line":132,"start_character":4,"end_line":132,"end_character":40},"in_reply_to":"ba5da102_71082c92","updated":"2016-10-31 22:57:41.000000000","message":"yeah that\u0027s a good point. I can submit a change for this once it\u0027s merged.","commit_id":"fd6445ee0555cd26afd2f18adffda3c3c0379a42"}]}
