)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19985,"name":"Ryosuke Mizuno","email":"r-mizuno@rs.jp.nec.com","username":"r-mizuno"},"change_message_id":"13add955f97b570c8d496117ea9dfb5008b3d55b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Cristian Sava \u003cCristian_Sava@symantec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-04 01:40:14 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Able to customize config file location when keystone runs as wsgi application."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Running keystone as a wsgi application should allow the same kind of customization"},{"line_number":10,"context_line":"as when run from the command line. Setting sys.argv for wsgi applications is difficult"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7af24918_45b963cb","line":7,"updated":"2016-03-04 06:42:22.000000000","message":"The first line should be limited to 50 characters.","commit_id":"4d766605c6816c0a79e46f60b2c1b9500d5f67ca"},{"author":{"_account_id":19985,"name":"Ryosuke Mizuno","email":"r-mizuno@rs.jp.nec.com","username":"r-mizuno"},"change_message_id":"13add955f97b570c8d496117ea9dfb5008b3d55b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Running keystone as a wsgi application should allow the same kind of customization"},{"line_number":10,"context_line":"as when run from the command line. Setting sys.argv for wsgi applications is difficult"},{"line_number":11,"context_line":"so that environment variables need to be used for this purpose."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related bug: #1552397"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I1cd8c7c9f8d4c748384f9b72511b677176672791"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7af24918_059f5b5f","line":12,"updated":"2016-03-04 06:42:22.000000000","message":"It is necessary to be a new line at 72 characters.","commit_id":"4d766605c6816c0a79e46f60b2c1b9500d5f67ca"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89f82e53acf4bdb395e4f232617df309f8ab530c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"wsgi applications is difficult so that environment variables need to"},{"line_number":12,"context_line":"be used for this purpose."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Related bug: #1552397"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I1cd8c7c9f8d4c748384f9b72511b677176672791"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5aef4532_53122c0a","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":21},"updated":"2016-03-09 10:21:21.000000000","message":"re-write this to:\n\n  Closes-Bug: #1552397","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"}],"doc/source/apache-httpd.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1dc21172b2e692f2743746c9731700daa23db4d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"PasteDeploy configuration file (``etc/keystone-paste.ini``) must be readable to"},{"line_number":108,"context_line":"HTTPD in one of the default locations described in :doc:`configuration`."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Configuration file location can be customized using the OS_KEYSTONE_CONFIG_DIR"},{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_a129248c","line":110,"updated":"2016-04-01 19:43:48.000000000","message":"nit: OS_KEYSTONE_CONFIG_DIR should probably be in backticks since it\u0027s a variable: \n\n    ``OS_KEYSTONE_CONFIG_DIR``","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5d4b8b4e712e46639a3cec18857532dead0f3ee8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"PasteDeploy configuration file (``etc/keystone-paste.ini``) must be readable to"},{"line_number":108,"context_line":"HTTPD in one of the default locations described in :doc:`configuration`."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Configuration file location can be customized using the OS_KEYSTONE_CONFIG_DIR"},{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_475db847","line":110,"in_reply_to":"ba0121b8_a129248c","updated":"2016-04-01 20:56:17.000000000","message":"Done","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1dc21172b2e692f2743746c9731700daa23db4d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"Configuration file location can be customized using the OS_KEYSTONE_CONFIG_DIR"},{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"},{"line_number":114,"context_line":"variable as semicolon separated entries."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Enable the site by creating a symlink from the file in ``sites-available`` to"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_413928d8","line":113,"updated":"2016-04-01 19:43:48.000000000","message":"Same comment here.","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5d4b8b4e712e46639a3cec18857532dead0f3ee8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"Configuration file location can be customized using the OS_KEYSTONE_CONFIG_DIR"},{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"},{"line_number":114,"context_line":"variable as semicolon separated entries."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Enable the site by creating a symlink from the file in ``sites-available`` to"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_8757d025","line":113,"in_reply_to":"ba0121b8_413928d8","updated":"2016-04-01 20:56:17.000000000","message":"Done","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1dc21172b2e692f2743746c9731700daa23db4d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"},{"line_number":114,"context_line":"variable as semicolon separated entries."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Enable the site by creating a symlink from the file in ``sites-available`` to"},{"line_number":117,"context_line":"``sites-enabled``, for example, on Debian/Ubuntu systems"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_e17f9c64","line":114,"updated":"2016-04-01 19:43:48.000000000","message":"Could add a small snippet to this section saying that the OS_KEYSTONE_CONFIG_FILES/DIR must be an absolute system path.","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5d4b8b4e712e46639a3cec18857532dead0f3ee8","unresolved":false,"context_lines":[{"line_number":111,"context_line":"environment variable: if this is set, the ``keystone.conf`` and"},{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"},{"line_number":114,"context_line":"variable as semicolon separated entries."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Enable the site by creating a symlink from the file in ``sites-available`` to"},{"line_number":117,"context_line":"``sites-enabled``, for example, on Debian/Ubuntu systems"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_67543c21","line":114,"in_reply_to":"ba0121b8_e17f9c64","updated":"2016-04-01 20:56:17.000000000","message":"Done","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1dc21172b2e692f2743746c9731700daa23db4d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"``keystone-dist.conf`` files will be searched inside this directory. Arbitrary"},{"line_number":113,"context_line":"configuration file locations can be specified using OS_KEYSTONE_CONFIG_FILES"},{"line_number":114,"context_line":"variable as semicolon separated entries."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Enable the site by creating a symlink from the file in ``sites-available`` to"},{"line_number":117,"context_line":"``sites-enabled``, for example, on Debian/Ubuntu systems"},{"line_number":118,"context_line":"(not required on Red Hat based systems)::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba0121b8_6130ace9","line":115,"updated":"2016-04-01 19:43:48.000000000","message":"Thanks for adding the docs!","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"}],"keystone/server/wsgi.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89f82e53acf4bdb395e4f232617df309f8ab530c","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"import oslo_i18n"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_9625c20a","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":9},"updated":"2016-03-09 10:21:21.000000000","message":"group this with `logging` as it is standard library not 3rd party","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"import oslo_i18n"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_028f7e2a","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":9},"in_reply_to":"5aef4532_9625c20a","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89f82e53acf4bdb395e4f232617df309f8ab530c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return application"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_config_files(env\u003dNone):"},{"line_number":61,"context_line":"    if env is None:"},{"line_number":62,"context_line":"        env \u003d os.environ"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_76fc7672","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":20},"updated":"2016-03-09 10:21:21.000000000","message":"we should mark this as private, so prefix it with an underscore (_)","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return application"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_config_files(env\u003dNone):"},{"line_number":61,"context_line":"    if env is None:"},{"line_number":62,"context_line":"        env \u003d os.environ"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_a297aa46","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":20},"in_reply_to":"5aef4532_76fc7672","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89f82e53acf4bdb395e4f232617df309f8ab530c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    if env is None:"},{"line_number":62,"context_line":"        env \u003d os.environ"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    dirname \u003d env.get(\"OS_KEYSTONE_CONFIG_DIR\", \"\").strip()"},{"line_number":65,"context_line":"    if not dirname:"},{"line_number":66,"context_line":"        dirname \u003d \"/etc/keystone/\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    files \u003d [s.strip() for s in"},{"line_number":69,"context_line":"             env.get(\"OS_KEYSTONE_CONFIG_FILES\", \"\").split(\u0027;\u0027)]"},{"line_number":70,"context_line":"    files \u003d [s for s in files if s]"},{"line_number":71,"context_line":"    if not files:"},{"line_number":72,"context_line":"        files \u003d [\u0027keystone.conf\u0027, \u0027keystone-dist.conf\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_36df8e0e","line":69,"range":{"start_line":64,"start_character":4,"end_line":69,"end_character":64},"updated":"2016-03-09 10:21:21.000000000","message":"we need to document this somewhere or it won\u0027t be useful","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f57d46cc06ff2a6be485e1de93991a57b0fda374","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    files \u003d [s.strip() for s in"},{"line_number":69,"context_line":"             env.get(\"OS_KEYSTONE_CONFIG_FILES\", \"\").split(\u0027;\u0027)]"},{"line_number":70,"context_line":"    files \u003d [s for s in files if s]"},{"line_number":71,"context_line":"    if not files:"},{"line_number":72,"context_line":"        files \u003d [\u0027keystone.conf\u0027, \u0027keystone-dist.conf\u0027]"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_358de77b","line":70,"updated":"2016-03-28 13:50:05.000000000","message":"nit: use `file` here instead of s since it makes the statement more readable.","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"3747cde2af7c2e6966aa675e20d5f1f760a0b6af","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    files \u003d [s.strip() for s in"},{"line_number":69,"context_line":"             env.get(\"OS_KEYSTONE_CONFIG_FILES\", \"\").split(\u0027;\u0027)]"},{"line_number":70,"context_line":"    files \u003d [s for s in files if s]"},{"line_number":71,"context_line":"    if not files:"},{"line_number":72,"context_line":"        files \u003d [\u0027keystone.conf\u0027, \u0027keystone-dist.conf\u0027]"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_8f475776","line":70,"in_reply_to":"da0c15f0_358de77b","updated":"2016-03-30 23:41:07.000000000","message":"merged this into the previous statement.","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1dc21172b2e692f2743746c9731700daa23db4d","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    return [s for s in config_files if s.startswith(\u0027/\u0027)]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def initialize_admin_application():"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_615eec13","line":75,"updated":"2016-04-01 19:43:48.000000000","message":"This assumes that config files must be absolute paths, right? So: \n\n    /etc/keystone/keystone.conf\n\ninstead of: \n\n    keystone.conf\n\nNot sure why someone would do the later, but we should also highlight that in the docs.","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f5dc09b757e8c9ee7ee7310977372cbc85ac14a2","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    return [s for s in config_files if s.startswith(\u0027/\u0027)]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def initialize_admin_application():"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_a6a7dcbb","line":75,"in_reply_to":"9a061dce_1d7e0aae","updated":"2016-04-06 17:50:48.000000000","message":"Yes, we\u0027ve got a problem here. The new patch #10 will address this issue: relative paths are converted to absolute only when using custom configuration directory; otherwise they are left in relative form and will be searched inside default config directories.","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4c537eee3816f9bb2f5cfa189e4d56909e729d0b","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    return [s for s in config_files if s.startswith(\u0027/\u0027)]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def initialize_admin_application():"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_1d7e0aae","line":75,"in_reply_to":"ba0121b8_476c9836","updated":"2016-04-05 21:23:38.000000000","message":"ah - so we should always end up with an absolute path?","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5d4b8b4e712e46639a3cec18857532dead0f3ee8","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    return [s for s in config_files if s.startswith(\u0027/\u0027)]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def initialize_admin_application():"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba0121b8_476c9836","line":75,"in_reply_to":"ba0121b8_615eec13","updated":"2016-04-01 20:56:17.000000000","message":"This works with both relative and absolute paths. This is how os.path join operation works:\n\n\u003e\u003e\u003e os.path.join(\"/etc/keystone\", \"x/y/z\")\n\n\u0027/etc/keystone/x/y/z\u0027\n\n\u003e\u003e\u003e os.path.join(\"/etc/keystone\", \"/x/y/z\")\n\n\u0027/x/y/z\u0027\n\nThe \"s.startswith(\u0027/\u0027)\" filter condition has been added as a simple sanity check.","commit_id":"5f8963dc5cc927b8c23836504070c32b5f260b5b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5bbb361c83b0e3e918dddb2c4bc70f34f42dbfd6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    if env is None:"},{"line_number":62,"context_line":"        env \u003d os.environ"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    dirname \u003d env.get(\u0027OS_KEYSTONE_CONFIG_DIR\u0027, \u0027\u0027).strip()"},{"line_number":65,"context_line":"    if not dirname:"},{"line_number":66,"context_line":"        dirname \u003d \u0027/etc/keystone/\u0027"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_58e9b013","line":64,"updated":"2016-04-05 21:30:12.000000000","message":"Could the default value here be: \n\n    env.get(\u0027OS_KEYSTONE_CONFIG_DIR\u0027, \u0027/etc/keystone/\u0027).strip()\n\nThat would collapse this all down into a one-liner.","commit_id":"a51122bbf70161c38a6a5839572814dee9e45b5c"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"04e778739ee89fd2d37bcaa85d540bd953004364","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    if env is None:"},{"line_number":62,"context_line":"        env \u003d os.environ"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    dirname \u003d env.get(\u0027OS_KEYSTONE_CONFIG_DIR\u0027, \u0027\u0027).strip()"},{"line_number":65,"context_line":"    if not dirname:"},{"line_number":66,"context_line":"        dirname \u003d \u0027/etc/keystone/\u0027"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_c605b07a","line":64,"in_reply_to":"9a061dce_58e9b013","updated":"2016-04-06 17:50:11.000000000","message":"Not exactly. We need to clearly distinguish if a custom configuration directory is being used or not in order to correctly handle relative paths.","commit_id":"a51122bbf70161c38a6a5839572814dee9e45b5c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5bbb361c83b0e3e918dddb2c4bc70f34f42dbfd6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    files \u003d [s.strip() for s in"},{"line_number":69,"context_line":"             env.get(\u0027OS_KEYSTONE_CONFIG_FILES\u0027, \u0027\u0027).split(\u0027;\u0027) if s.strip()]"},{"line_number":70,"context_line":"    if not files:"},{"line_number":71,"context_line":"        files \u003d [\u0027keystone.conf\u0027, \u0027keystone-dist.conf\u0027]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_985fc8e4","line":71,"updated":"2016-04-05 21:30:12.000000000","message":"same comment here","commit_id":"a51122bbf70161c38a6a5839572814dee9e45b5c"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"04e778739ee89fd2d37bcaa85d540bd953004364","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    files \u003d [s.strip() for s in"},{"line_number":69,"context_line":"             env.get(\u0027OS_KEYSTONE_CONFIG_FILES\u0027, \u0027\u0027).split(\u0027;\u0027) if s.strip()]"},{"line_number":70,"context_line":"    if not files:"},{"line_number":71,"context_line":"        files \u003d [\u0027keystone.conf\u0027, \u0027keystone-dist.conf\u0027]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    config_files \u003d [os.path.join(dirname, fname) for fname in files]"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_e68554cf","line":71,"in_reply_to":"9a061dce_985fc8e4","updated":"2016-04-06 17:50:11.000000000","message":"The default config file should be included only when a custom config directory is used. Otherwise, the config file list will be left empty, for the default config file to be searched within all default config directories.","commit_id":"a51122bbf70161c38a6a5839572814dee9e45b5c"}],"keystone/tests/unit/test_wsgi.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d05b3e3a6387ce61c5e06c91f15cb7f9821c9318","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from keystone.common import environment"},{"line_number":31,"context_line":"from keystone.common import wsgi"},{"line_number":32,"context_line":"from keystone import exception"},{"line_number":33,"context_line":"from keystone.server.wsgi import get_config_files"},{"line_number":34,"context_line":"from keystone.tests import unit"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_bb427e0e","line":33,"updated":"2016-03-08 22:30:49.000000000","message":"As keystone convention we don\u0027t really import functions, we usually approach imports like the following: \n\n    from keystone.service import wsgi as server_wsgi\n    ...\n    server_wsgi.get_config_files()","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89f82e53acf4bdb395e4f232617df309f8ab530c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from keystone.common import environment"},{"line_number":31,"context_line":"from keystone.common import wsgi"},{"line_number":32,"context_line":"from keystone import exception"},{"line_number":33,"context_line":"from keystone.server.wsgi import get_config_files"},{"line_number":34,"context_line":"from keystone.tests import unit"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d61bcac8","line":33,"in_reply_to":"5aef4532_bb427e0e","updated":"2016-03-09 10:21:21.000000000","message":"++","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d05b3e3a6387ce61c5e06c91f15cb7f9821c9318","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"class WSGIAppConfigTest(unit.TestCase):"},{"line_number":317,"context_line":"    def setUp(self):"},{"line_number":318,"context_line":"        super(WSGIAppConfigTest, self).setUp()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_config_files_have_default_values(self):"},{"line_number":321,"context_line":"        config_files \u003d get_config_files()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_bb36fe4f","line":318,"updated":"2016-03-08 22:30:49.000000000","message":"We shouldn\u0027t need this unless we are planning on setting things up specifically for these tests. The parent setUp method should get called by default.","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"class WSGIAppConfigTest(unit.TestCase):"},{"line_number":317,"context_line":"    def setUp(self):"},{"line_number":318,"context_line":"        super(WSGIAppConfigTest, self).setUp()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_config_files_have_default_values(self):"},{"line_number":321,"context_line":"        config_files \u003d get_config_files()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_de18cad5","line":318,"in_reply_to":"5aef4532_bb36fe4f","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d05b3e3a6387ce61c5e06c91f15cb7f9821c9318","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    def test_config_files_have_default_values(self):"},{"line_number":321,"context_line":"        config_files \u003d get_config_files()"},{"line_number":322,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone.conf\u0027, config_files)"},{"line_number":323,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone-dist.conf\u0027, config_files)"},{"line_number":324,"context_line":"        self.assertEqual(2, len(config_files))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        env \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_bbdefe3c","line":323,"updated":"2016-03-08 22:30:49.000000000","message":"These strings could be pulled out into variables since they are used more than once.","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    def test_config_files_have_default_values(self):"},{"line_number":321,"context_line":"        config_files \u003d get_config_files()"},{"line_number":322,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone.conf\u0027, config_files)"},{"line_number":323,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone-dist.conf\u0027, config_files)"},{"line_number":324,"context_line":"        self.assertEqual(2, len(config_files))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        env \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_7e2896e2","line":323,"in_reply_to":"5aef4532_bbdefe3c","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d05b3e3a6387ce61c5e06c91f15cb7f9821c9318","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        env \u003d {}"},{"line_number":327,"context_line":"        env[\u0027OS_KEYSTONE_CONFIG_FILES\u0027] \u003d \u0027  \u0027"},{"line_number":328,"context_line":"        env[\u0027OS_KEYSTONE_CONFIG_DIR\u0027] \u003d \u0027  \u0027"},{"line_number":329,"context_line":"        config_files \u003d get_config_files(env)"},{"line_number":330,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone.conf\u0027, config_files)"},{"line_number":331,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone-dist.conf\u0027, config_files)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_db782a2e","line":328,"updated":"2016-03-08 22:30:49.000000000","message":"This seems like it\u0027s own test because it\u0027s testing that the default config values are assumed if the environment variables are empty (versus not present like the above case).","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        env \u003d {}"},{"line_number":327,"context_line":"        env[\u0027OS_KEYSTONE_CONFIG_FILES\u0027] \u003d \u0027  \u0027"},{"line_number":328,"context_line":"        env[\u0027OS_KEYSTONE_CONFIG_DIR\u0027] \u003d \u0027  \u0027"},{"line_number":329,"context_line":"        config_files \u003d get_config_files(env)"},{"line_number":330,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone.conf\u0027, config_files)"},{"line_number":331,"context_line":"        self.assertIn(\u0027/etc/keystone/keystone-dist.conf\u0027, config_files)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_5e25da06","line":328,"in_reply_to":"5aef4532_db782a2e","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d05b3e3a6387ce61c5e06c91f15cb7f9821c9318","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        config_files \u003d get_config_files(env)"},{"line_number":382,"context_line":"        self.assertIn(\u0027/etc/kst/kst.conf\u0027, config_files)"},{"line_number":383,"context_line":"        self.assertIn(\u0027/etc/kst/kst2.conf\u0027, config_files)"},{"line_number":384,"context_line":"        self.assertEqual(2, len(config_files))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"class ExtensionRouterTest(BaseWSGITest):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_3b1cae11","line":384,"updated":"2016-03-08 22:30:49.000000000","message":"This test seems like it could be broken up a bit since it has four logical situations.","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"f59293d1210c48b9b6ea5afa9df0444a4d1cdffc","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        config_files \u003d get_config_files(env)"},{"line_number":382,"context_line":"        self.assertIn(\u0027/etc/kst/kst.conf\u0027, config_files)"},{"line_number":383,"context_line":"        self.assertIn(\u0027/etc/kst/kst2.conf\u0027, config_files)"},{"line_number":384,"context_line":"        self.assertEqual(2, len(config_files))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"class ExtensionRouterTest(BaseWSGITest):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_be1e9eb8","line":384,"in_reply_to":"5aef4532_3b1cae11","updated":"2016-03-10 00:35:54.000000000","message":"Done","commit_id":"809dcba8fa2d49f67cf453fa36f643d9b8a0ef3b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f57d46cc06ff2a6be485e1de93991a57b0fda374","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"class WSGIAppConfigTest(unit.TestCase):"},{"line_number":318,"context_line":"    default_config_dir \u003d \"/etc/keystone/\""},{"line_number":319,"context_line":"    default_config_files \u003d [\"keystone.conf\", \"keystone-dist.conf\"]"},{"line_number":320,"context_line":"    custom_config_dir \u003d \"/etc/kst/\""},{"line_number":321,"context_line":"    custom_config_files \u003d [\"kst.conf\", \"kst2.conf\"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_f5c6cf47","line":318,"updated":"2016-03-28 13:50:05.000000000","message":"nit: suggest using single quotes instead of double quotes to maintain convention with the majority of your patch.","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"3747cde2af7c2e6966aa675e20d5f1f760a0b6af","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"class WSGIAppConfigTest(unit.TestCase):"},{"line_number":318,"context_line":"    default_config_dir \u003d \"/etc/keystone/\""},{"line_number":319,"context_line":"    default_config_files \u003d [\"keystone.conf\", \"keystone-dist.conf\"]"},{"line_number":320,"context_line":"    custom_config_dir \u003d \"/etc/kst/\""},{"line_number":321,"context_line":"    custom_config_files \u003d [\"kst.conf\", \"kst2.conf\"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_ef27f3c7","line":318,"in_reply_to":"da0c15f0_f5c6cf47","updated":"2016-03-30 23:41:07.000000000","message":"Done","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f57d46cc06ff2a6be485e1de93991a57b0fda374","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertListEqual(config_files, expected_config_files)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_can_use_multiple_config_files_under_default_config_dir(self):"},{"line_number":349,"context_line":"        env \u003d {\u0027OS_KEYSTONE_CONFIG_FILES\u0027: \";\".join(self.custom_config_files)}"},{"line_number":350,"context_line":"        config_files \u003d server_wsgi._get_config_files(env)"},{"line_number":351,"context_line":"        config_files.sort()"},{"line_number":352,"context_line":"        expected_config_files \u003d [os.path.join(self.default_config_dir, s)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_95de730f","line":349,"updated":"2016-03-28 13:50:05.000000000","message":"same comment here, and throughout the rest of the change.","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"3747cde2af7c2e6966aa675e20d5f1f760a0b6af","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertListEqual(config_files, expected_config_files)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_can_use_multiple_config_files_under_default_config_dir(self):"},{"line_number":349,"context_line":"        env \u003d {\u0027OS_KEYSTONE_CONFIG_FILES\u0027: \";\".join(self.custom_config_files)}"},{"line_number":350,"context_line":"        config_files \u003d server_wsgi._get_config_files(env)"},{"line_number":351,"context_line":"        config_files.sort()"},{"line_number":352,"context_line":"        expected_config_files \u003d [os.path.join(self.default_config_dir, s)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_0f2b4795","line":349,"in_reply_to":"da0c15f0_95de730f","updated":"2016-03-30 23:41:07.000000000","message":"Done","commit_id":"c603a5bbfcb21adca1db57d308ed3f45f02e7580"}]}
