text: #!/usr/bin/env python
  
  """
  Project-wide application configuration.
  
  DO NOT STORE SECRETS, PASSWORDS, ETC. IN THIS FILE.
  They will be exposed to users. Use environment variables instead.
  See get_secrets() below for a fast way to access them.
  """
  
  import os
  
  from authomatic.providers import oauth2
  from authomatic import Authomatic
  
  
  """
  NAMES
  """
  # Project name to be used in urls
  # Use dashes, not underscores!
  PROJECT_SLUG = 'best-books-2015'
  
  # Project name to be used in file paths
  PROJECT_FILENAME = 'books15'
  
  # The name of the repository containing the source
  REPOSITORY_NAME = 'books15'
  GITHUB_USERNAME = 'nprapps'
  REPOSITORY_URL = 'git@github.com:%s/%s.git' % (GITHUB_USERNAME, REPOSITORY_NAME)
  REPOSITORY_ALT_URL = None # 'git@bitbucket.org:nprapps/%s.git' % REPOSITORY_NAME'
  
  # Project name used for assets rig
  # Should stay the same, even if PROJECT_SLUG changes
  ASSETS_SLUG = 'books15'
  
  """
  DEPLOYMENT
  """
  PRODUCTION_S3_BUCKET = 'apps.npr.org'
  
  STAGING_S3_BUCKET = 'stage-apps.npr.org'
  
  # ASSETS_S3_BUCKET = 'assets.apps.npr.org'
  # ASSETS_S3_BUCKET = 's3.amazonaws.com'
  # ASSETS_S3_BUCKET = 'movement-2016.s3.amazonaws.com'
  ASSETS_S3_BUCKET = 'movement-2016'
  
  DEFAULT_MAX_AGE = 20
  
  RELOAD_TRIGGER = False
  RELOAD_CHECK_INTERVAL = 60
  
  PRODUCTION_SERVERS = ['cron.nprapps.org']
  STAGING_SERVERS = ['cron-staging.nprapps.org']
  
  # Should code be deployed to the web/cron servers?
  DEPLOY_TO_SERVERS = False
  
  SERVER_USER = 'ubuntu'
  SERVER_PYTHON = 'python2.7'
  SERVER_PROJECT_PATH = '/home/%s/apps/%s' % (SERVER_USER, PROJECT_FILENAME)
  SERVER_REPOSITORY_PATH = '%s/repository' % SERVER_PROJECT_PATH
  SERVER_VIRTUALENV_PATH = '%s/virtualenv' % SERVER_PROJECT_PATH
  
  # Should the crontab file be installed on the servers?
  # If True, DEPLOY_TO_SERVERS must also be True
  DEPLOY_CRONTAB = False
  
  # Should the service configurations be installed on the servers?
  # If True, DEPLOY_TO_SERVERS must also be True
  DEPLOY_SERVICES = False
  
  UWSGI_SOCKET_PATH = '/tmp/%s.uwsgi.sock' % PROJECT_FILENAME
  
  # Services are the server-side services we want to enable and configure.
  # A three-tuple following this format:
  # (service name, service deployment path, service config file extension)
  SERVER_SERVICES = [
      ('app', SERVER_REPOSITORY_PATH, 'ini'),
      ('uwsgi', '/etc/init', 'conf'),
      ('nginx', '/etc/nginx/locations-enabled', 'conf'),
  ]
  
  # These variables will be set at runtime. See configure_targets() below
  S3_BUCKET = None
  S3_BASE_URL = None
  S3_DEPLOY_URL = None
  SERVERS = []
  SERVER_BASE_URL = None
  SERVER_LOG_PATH = None
  DEBUG = True
  
  """
  COPY EDITING
  """
  # COPY_GOOGLE_DOC_KEY = '1iV3gN-3S7W_0_R8GqJ-jYKDsbW2AOafoc3kZB59bIPE'
  COPY_GOOGLE_DOC_KEY = '1b57DbxWH6f08ZIZqPuMozeeRoc6u8LNVLcjrZQ4ptrY'
  
  COPY_PATH = 'data/copy.xlsx'
  
  # DATA_GOOGLE_DOC_KEY = '1uY_0zU7wAa1TLYGC4yGJZUamLulRTJZiwKWmiHZ73qU'
  DATA_GOOGLE_DOC_KEY = '1ToCIpyTa7Szh6H7UfVm876lmq03qod8LG4pVC78eJ1w'
  
  LINK_CATEGORY_MAP = {
      'Author Interviews': 'Interview',
      'Book Reviews': 'Review',
  }
  LINK_CATEGORY_DEFAULT = 'Feature'
  
  """
  SHARING
  """
  SHARE_URL = 'http://%s/%s/' % (PRODUCTION_S3_BUCKET, PROJECT_SLUG)
  
  """
  ADS
  """
  
  NPR_DFP = {
      'STORY_ID': '1002',
      'TARGET': 'homepage',
      'ENVIRONMENT': 'NPRTEST',
      'TESTSERVER': 'false'
  }
  
  """
  SERVICES
  """
  NPR_GOOGLE_ANALYTICS = {
      'ACCOUNT_ID': 'UA-5828686-4',
      'DOMAIN': PRODUCTION_S3_BUCKET,
      'TOPICS': '[1032,1008,1002]',
  }
  
  VIZ_GOOGLE_ANALYTICS = {
      'ACCOUNT_ID': 'UA-5828686-75'
  }
  
  DISQUS_API_KEY = 'tIbSzEhGBE9NIptbnQWn4wy1gZ546CsQ2IHHtxJiYAceyyPoAkDkVnQfCifmCaQW'
  DISQUS_UUID = '0af7f82b-832a-11e5-8a04-3c07544df4b5'
  
  """
  OAUTH
  """
  
  GOOGLE_OAUTH_CREDENTIALS_PATH = '~/.google_oauth_credentials'
  
  authomatic_config = {
      'google': {
          'id': 1,
          'class_': oauth2.Google,
          'consumer_key': os.environ.get('GOOGLE_OAUTH_CLIENT_ID'),
          'consumer_secret': os.environ.get('GOOGLE_OAUTH_CONSUMER_SECRET'),
          'scope': ['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/userinfo.email'],
          'offline': True,
      },
  }
  
  authomatic = Authomatic(authomatic_config, os.environ.get('AUTHOMATIC_SALT'))
  
  """
  Utilities
  """
  def get_secrets():
      """
      A method for accessing our secrets.
      """
      secrets_dict = {}
  
      for k,v in os.environ.items():
          if k.startswith(PROJECT_FILENAME):
              k = k[len(PROJECT_FILENAME) + 1:]
              secrets_dict[k] = v
  
      return secrets_dict
  
  def configure_targets(deployment_target):
      """
      Configure deployment targets. Abstracted so this can be
      overridden for rendering before deployment.
      """
      global S3_BUCKET
      global S3_BASE_URL
      global S3_DEPLOY_URL
      global SERVERS
      global SERVER_BASE_URL
      global SERVER_LOG_PATH
      global DEBUG
      global DEPLOYMENT_TARGET
      global DISQUS_SHORTNAME
      global ASSETS_MAX_AGE
  
      if deployment_target == 'production':
          S3_BUCKET = PRODUCTION_S3_BUCKET
          S3_BASE_URL = 'http://%s/%s' % (S3_BUCKET, PROJECT_SLUG)
          S3_DEPLOY_URL = 's3://%s/%s' % (S3_BUCKET, PROJECT_SLUG)
          SERVERS = PRODUCTION_SERVERS
          SERVER_BASE_URL = 'http://%s/%s' % (SERVERS[0], PROJECT_SLUG)
          SERVER_LOG_PATH = '/var/log/%s' % PROJECT_FILENAME
          DISQUS_SHORTNAME = 'npr-news'
          DEBUG = False
          ASSETS_MAX_AGE = 86400
      elif deployment_target == 'staging':
          S3_BUCKET = STAGING_S3_BUCKET
          S3_BASE_URL = 'http://%s/%s' % (S3_BUCKET, PROJECT_SLUG)
          S3_DEPLOY_URL = 's3://%s/%s' % (S3_BUCKET, PROJECT_SLUG)
          SERVERS = STAGING_SERVERS
          SERVER_BASE_URL = 'http://%s/%s' % (SERVERS[0], PROJECT_SLUG)
          SERVER_LOG_PATH = '/var/log/%s' % PROJECT_FILENAME
          DISQUS_SHORTNAME = 'nprviz-test'
          DEBUG = True
          ASSETS_MAX_AGE = 20
      else:
          S3_BUCKET = None
          S3_BASE_URL = 'http://127.0.0.1:8000'
          S3_DEPLOY_URL = None
          SERVERS = []
          SERVER_BASE_URL = 'http://127.0.0.1:8001/%s' % PROJECT_SLUG
          SERVER_LOG_PATH = '/tmp'
          DISQUS_SHORTNAME = 'nprviz-test'
          DEBUG = True
          ASSETS_MAX_AGE = 20
  
      DEPLOYMENT_TARGET = deployment_target
  
  """
  Run automated configuration
  """
  DEPLOYMENT_TARGET = os.environ.get('DEPLOYMENT_TARGET', None)
  
  configure_targets(DEPLOYMENT_TARGET)
  