title: How to reload a configuration file on each request for Flask?
body: <p>Is there an idiomatic way to have Flask reload my configuration file on every request? The purpose of this would be so that I could change passwords or other configuration related items without having to shut down and restart the server in production.</p>
  
  <p>Edit: <code>app.run(debug=True)</code> is not acceptable as it restarts the server and shouldn't be used in production.</p>
  
  <p>Perhaps a decorator like the following:</p>
  
  <pre><code>def reload_configuration(func):
      @wraps(func)
      def _reload_configuration(*args, **kwargs):
          #even better, only reload if the file has changed
          reload(settings)
          app.config.from_object(settings.Config)
          return func(*args, **kwargs)
  
      return _reload_configuration
  
  @app.route('/')
  @reload_configuration
  def home():
      return render_template('home.html')
  </code></pre>
  
  <p>If it is relevant, here is how I am loading the configuration now:</p>
  
  <p>My <code>app/app/__init__.py</code> file:</p>
  
  <pre><code>from flask import Flask
  from settings import Config
  
  app = Flask(__name__)
  app.config.from_object(Config)
  
  # ...
  </code></pre>
  
  <p>My <code>app/app/settings.py</code> file:</p>
  
  <pre><code>class Config(object):
      SQLALCHEMY_TRACK_MODIFICATIONS = False
      SECRET_KEY = os.urandom(32)
      # ...
  
  try:
     from app.local_settings import Config
  except ImportError:
      pass
  </code></pre>