)]}'
{"keystone/assignment/V8_backends/sql.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"050a62c5b92c5f9c73a2d3fb60d1de9acbb74950","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.assignment.backends import base"},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":"import keystone.conf"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone.i18n import _"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5edb1a1b","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":20},"updated":"2016-06-24 18:22:33.000000000","message":"is there a reason for importing it like this rather than\n\n    from keystone import conf\n\n\nThis ^ is how I\u0027ve seen imports in our code so far. I am not against, just want to check","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1c58b05a280d5682d7e70888775dd77ed091c72a","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.assignment.backends import base"},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":"import keystone.conf"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone.i18n import _"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_94d3a15f","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":20},"in_reply_to":"3aaa91ec_5edb1a1b","updated":"2016-06-24 18:54:56.000000000","message":"I\u0027ve asked for David input on this. It looks like there isn\u0027t a convention, and I agree with him it\u0027s clearer if we use keystone.conf throughout the files","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"20e797b5e9779b40f9916f0028b91e0595804fdd","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.assignment.backends import base"},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":"import keystone.conf"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone.i18n import _"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_2a108856","line":20,"in_reply_to":"3aaa91ec_94d3a15f","updated":"2016-06-24 20:13:07.000000000","message":"It *can* be imported either way, but my goal in this patchset was to copy nova\u0027s work, and nova took the approach of API-first, and \"import nova.conf\" / \"import keystone.conf\" reads pretty well to me.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone.i18n import _"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class AssignmentType(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_038dc0d5","line":25,"updated":"2016-06-24 17:13:27.000000000","message":"Most files in keystone (all of them that use conf) have these same 4 line changes.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/assignment/routers.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystone.assignment import controllers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.common import json_home"},{"line_number":23,"context_line":"from keystone.common import router"},{"line_number":24,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3ec3ae58","line":21,"updated":"2016-06-24 18:40:51.000000000","message":"?","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"20e797b5e9779b40f9916f0028b91e0595804fdd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystone.assignment import controllers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.common import json_home"},{"line_number":23,"context_line":"from keystone.common import router"},{"line_number":24,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_c559f536","line":21,"in_reply_to":"3aaa91ec_3ec3ae58","updated":"2016-06-24 20:13:07.000000000","message":"Oops, will fix in follow up","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/common/config.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_e3aeb42c","side":"PARENT","line":1,"updated":"2016-06-24 17:13:27.000000000","message":"This entire file is split into the keystone.conf package.","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"    logging.captureWarnings(True)"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":""},{"line_number":1142,"context_line":"def find_paste_config():"},{"line_number":1143,"context_line":"    \"\"\"Find Keystone\u0027s paste.deploy configuration file."},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"    Keystone\u0027s paste.deploy configuration file is specified in the"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_631e4471","side":"PARENT","line":1142,"updated":"2016-06-24 17:13:27.000000000","message":"This was moved into keystone.server.wsgi where it\u0027s used, because it needs to consume both CONF and keystone.exception. If we left it in keystone.conf, it would have resulted in a circular import, because keystone.exception needs keystone.conf, too.","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"    logging.captureWarnings(True)"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":""},{"line_number":1142,"context_line":"def find_paste_config():"},{"line_number":1143,"context_line":"    \"\"\"Find Keystone\u0027s paste.deploy configuration file."},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"    Keystone\u0027s paste.deploy configuration file is specified in the"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_9e074281","side":"PARENT","line":1142,"in_reply_to":"3aaa91ec_631e4471","updated":"2016-06-24 18:40:51.000000000","message":"It didn\u0027t really belong here anyway.","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":1193,"context_line":"            if section:"},{"line_number":1194,"context_line":"                conf.register_opt(option, group\u003dsection)"},{"line_number":1195,"context_line":"            else:"},{"line_number":1196,"context_line":"                conf.register_opt(option)"},{"line_number":1197,"context_line":""},{"line_number":1198,"context_line":"    # register any non-default auth methods here (used by extensions, etc)"},{"line_number":1199,"context_line":"    setup_authentication(conf)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_c36c580a","side":"PARENT","line":1196,"updated":"2016-06-24 17:13:27.000000000","message":"This for block is replaced by something much simpler in keystone.conf.__init__ - and this is one of the only changes to the code in this file (it was otherwise just moved).","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"}],"keystone/common/sql/migrate_repo/versions/082_add_federation_tables.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"59176288019f204897432e3df6c737db602d3ee7","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.common.sql import migration_helpers"},{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":21,"context_line":"_RELAY_STATE_PREFIX \u003d \u0027relay_state_prefix\u0027"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_cc28fd9c","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":0},"updated":"2016-06-24 22:38:43.000000000","message":"needs an extra line break","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/__init__.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"# Options are registered when keystone.conf is first imported."},{"line_number":90,"context_line":"for module in conf_modules:"},{"line_number":91,"context_line":"    module.register_opts(CONF)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"oslo_messaging.set_transport_defaults(control_exchange\u003d\u0027keystone\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ee385bd5","line":91,"updated":"2016-06-24 17:13:27.000000000","message":"This bit is new vs keystone.common.config","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    help\u003d\u0027Port to connect to for remote debugger.\u0027))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    for module in conf_modules:"},{"line_number":138,"context_line":"        module.register_opts(conf)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # register any non-default auth methods here (used by extensions, etc)"},{"line_number":141,"context_line":"    auth.setup_authentication()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ae593337","line":138,"updated":"2016-06-24 17:13:27.000000000","message":"This for loop is simplified vs keystone.common.config (you used to have to loop through a dictionary of lists).","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/assignment.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fedf710520b4593b1708e9cc17baa19c2f105f55","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_config import cfg"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"GROUP_NAME \u003d __name__.split(\u0027.\u0027)[-1]"},{"line_number":17,"context_line":"ALL_OPTS \u003d ["},{"line_number":18,"context_line":"    cfg.StrOpt(\u0027driver\u0027,"},{"line_number":19,"context_line":"               help\u003d\u0027Entrypoint for the assignment backend driver in the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_c6ff8da8","line":16,"updated":"2016-06-23 14:23:19.000000000","message":"++ nice","commit_id":"70cf1284fa9857d1ca97b7731d75fb1c958470cf"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"driver \u003d cfg.StrOpt("},{"line_number":19,"context_line":"    \u0027driver\u0027,"},{"line_number":20,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":21,"context_line":"Entrypoint for the assignment backend driver in the keystone.assignment"},{"line_number":22,"context_line":"namespace. Only an SQL driver is supplied. If an assignment driver is not"},{"line_number":23,"context_line":"specified, the identity driver will choose the assignment driver (driver"},{"line_number":24,"context_line":"selection based on `[identity]/driver` option is deprecated and will be removed"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_8e85575b","line":21,"updated":"2016-06-24 17:13:27.000000000","message":"Nova had the idea to move configuration options to be top level, and then define all the help text as docstrings. That prevents us from having to deal with arbitrarily indented single quotes, escaping things, etc, which made writing config help a nightmare. This should make it much easier for us to write better help text :)","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"\"\"\"))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"GROUP_NAME \u003d __name__.split(\u0027.\u0027)[-1]"},{"line_number":37,"context_line":"ALL_OPTS \u003d ["},{"line_number":38,"context_line":"    driver,"},{"line_number":39,"context_line":"    prohibited_implied_role"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_0e9a07b9","line":36,"updated":"2016-06-24 17:13:27.000000000","message":"From here through the bottom of the file, every keystone.conf module is basically the same.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/base.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"53b145d38a24948298dfaddd3e227dd3d93a57f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7aa08908_c993924e","updated":"2016-06-04 18:18:05.000000000","message":"i\u0027m okay with renaming this to default.py","commit_id":"2eb968290220205ecbd90de1de398494116fb702"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4a525af293f9cb8d6cab36b649015951381d7b6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7aa08908_32023d70","in_reply_to":"7aa08908_c993924e","updated":"2016-06-06 21:26:26.000000000","message":"I was tempted to do exactly the same thing, but nova called it base.py. I\u0027ll experiment with a rename later, and probably propose the same to nova.","commit_id":"2eb968290220205ecbd90de1de398494116fb702"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"\"\"\"))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"GROUP_NAME \u003d \u0027DEFAULT\u0027"},{"line_number":198,"context_line":"ALL_OPTS \u003d ["},{"line_number":199,"context_line":"    admin_token,"},{"line_number":200,"context_line":"    public_endpoint,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_4ee7ef3f","line":197,"updated":"2016-06-24 17:13:27.000000000","message":"Note that keystone.conf.base gets registered as [DEFAULT] -- I\u0027d like to consider renaming this to keystone.conf.default because that\u0027s more logical to me, but I want to copy nova\u0027s lead first, then propose that later.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"050a62c5b92c5f9c73a2d3fb60d1de9acbb74950","unresolved":false,"context_lines":[{"line_number":194,"context_line":"\"\"\"))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"GROUP_NAME \u003d \u0027DEFAULT\u0027"},{"line_number":198,"context_line":"ALL_OPTS \u003d ["},{"line_number":199,"context_line":"    admin_token,"},{"line_number":200,"context_line":"    public_endpoint,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ee1e9b0a","line":197,"in_reply_to":"3aaa91ec_4ee7ef3f","updated":"2016-06-24 18:22:33.000000000","message":"++","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/constants.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"59176288019f204897432e3df6c737db602d3ee7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"_CERTFILE \u003d \u0027/etc/keystone/ssl/certs/signing_cert.pem\u0027"},{"line_number":25,"context_line":"_KEYFILE \u003d \u0027/etc/keystone/ssl/private/signing_key.pem\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"_DEPRECATE_PKI_MSG \u003d utils.fmt(\"\"\""},{"line_number":28,"context_line":"PKI token support has been deprecated in the M release and will be removed in"},{"line_number":29,"context_line":"the O release. Fernet or UUID tokens are recommended."},{"line_number":30,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ac0ad123","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":18},"updated":"2016-06-24 22:38:43.000000000","message":"hmm i thought there were more of these messages","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/eventlet_server.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"59176288019f204897432e3df6c737db602d3ee7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.conf import utils"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"_DEPRECATE_EVENTLET_MSG \u003d utils.fmt(\"\"\""},{"line_number":19,"context_line":"Support for running keystone under eventlet has been removed in the N release."},{"line_number":20,"context_line":"These options remain for backwards compatibility because they are used for URL"},{"line_number":21,"context_line":"substitutions."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ec005904","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":23},"updated":"2016-06-24 22:38:43.000000000","message":"move to constants? meh, it\u0027ll be removed anyway","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/opts.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","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":"\"\"\"Single point of entry to generate the sample configuration file."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module collects all the necessary info from the other modules in this"},{"line_number":16,"context_line":"package. It is assumed that:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_6ed62b50","line":13,"updated":"2016-06-24 17:13:27.000000000","message":"This module is entirely copied from nova, with a few references to nova removed from the documentation.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/conf/utils.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def fmt(docstr):"},{"line_number":15,"context_line":"    \"\"\"Format a docstring for use as documentation in sample config.\"\"\""},{"line_number":16,"context_line":"    # Replace newlines with spaces, as docstrings contain literal newlines that"},{"line_number":17,"context_line":"    # should not be rendered into the sample configuration file (instead, line"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_beb83e76","line":14,"updated":"2016-06-24 18:40:51.000000000","message":"At first I was thinking that this should use textwrap.dedent, but that doesn\u0027t handle the embedded newlines.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"20e797b5e9779b40f9916f0028b91e0595804fdd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def fmt(docstr):"},{"line_number":15,"context_line":"    \"\"\"Format a docstring for use as documentation in sample config.\"\"\""},{"line_number":16,"context_line":"    # Replace newlines with spaces, as docstrings contain literal newlines that"},{"line_number":17,"context_line":"    # should not be rendered into the sample configuration file (instead, line"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_455d0514","line":14,"in_reply_to":"3aaa91ec_beb83e76","updated":"2016-06-24 20:13:07.000000000","message":"I\u0027d be handy if there was something that did this already, but I was thinking we should upstream this to oslo.config so that other projects can take the same approach as well.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/server/wsgi.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6b17a1187f8bb74ff0c8b9efce857429faf4a38c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return application"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def find_paste_config():"},{"line_number":79,"context_line":"    \"\"\"Find Keystone\u0027s paste.deploy configuration file."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    Keystone\u0027s paste.deploy configuration file is specified in the"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_2eb9c315","line":78,"updated":"2016-06-24 17:13:27.000000000","message":"This was moved from keystone.common.config - there\u0027s an explanation in that file.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return application"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def find_paste_config():"},{"line_number":79,"context_line":"    \"\"\"Find Keystone\u0027s paste.deploy configuration file."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    Keystone\u0027s paste.deploy configuration file is specified in the"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_b19b4f65","line":78,"in_reply_to":"3aaa91ec_2eb9c315","updated":"2016-06-24 18:40:51.000000000","message":"This seem to be better off here anyway.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone/tests/unit/test_versions.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"v2_MEDIA_TYPES \u003d ["},{"line_number":37,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_31b47f33","line":34,"updated":"2016-06-24 18:40:51.000000000","message":"?","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"20e797b5e9779b40f9916f0028b91e0595804fdd","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"v2_MEDIA_TYPES \u003d ["},{"line_number":37,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_85a1adfa","line":34,"in_reply_to":"3aaa91ec_31b47f33","updated":"2016-06-24 20:13:07.000000000","message":"Will remove in follow up.","commit_id":"d9c6b50a3ae514e640fa13a344e59fe3649ee0ef"}],"keystone_tempest_plugin/config.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"23663996c667c3e5646a5c0dc99f7611a5eca01f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_516cab9b","side":"PARENT","line":16,"updated":"2016-06-24 18:40:51.000000000","message":"Unrelated, but I like it!","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"20e797b5e9779b40f9916f0028b91e0595804fdd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_65b9212e","side":"PARENT","line":16,"in_reply_to":"3aaa91ec_516cab9b","updated":"2016-06-24 20:13:07.000000000","message":"Ha, I think my sed work removed the oslo_config line below, and when manually adding it back, I probably removed this line. I agree, I\u0027ll leave this change here, as there shouldn\u0027t be two blank lines between the copyright header and the first line of code.","commit_id":"f6f4eb2df1fde05490f47e04a912ef60b3760335"}]}
