text: import os
  
  import dj_database_url
  
  
  PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
  PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
  BASE_DIR = PACKAGE_ROOT
  
  DEBUG = bool(int(os.environ.get("DEBUG", "1")))
  TRACING_ENABLED = bool(int(os.environ.get("TRACING_ENABLED", not DEBUG)))
  
  DATABASES = {
      "default": dj_database_url.config(default="postgres://localhost/scaife-viewer")
  }
  
  ALLOWED_HOSTS = [
      "localhost",
      "scaife.perseus.org",
      "scaife-dev.perseus.org",
      "scaife.eldarion.com",
      "scaife-dev.eldarion.com",
  ]
  
  host_domain = os.environ.get("GONDOR_INSTANCE_DOMAIN")
  if host_domain:
      ALLOWED_HOSTS.append(host_domain)
  
  # Local time zone for this installation. Choices can be found here:
  # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
  # although not all choices may be available on all operating systems.
  # On Unix systems, a value of None will cause Django to use the same
  # timezone as the operating system.
  # If running in a Windows environment this must be set to the same as your
  # system time zone.
  TIME_ZONE = "UTC"
  
  # Language code for this installation. All choices can be found here:
  # http://www.i18nguy.com/unicode/language-identifiers.html
  LANGUAGE_CODE = "en-us"
  
  SITE_ID = int(os.environ.get("SITE_ID", 1))
  
  # If you set this to False, Django will make some optimizations so as not
  # to load the internationalization machinery.
  USE_I18N = True
  
  # If you set this to False, Django will not format dates, numbers and
  # calendars according to the current locale.
  USE_L10N = True
  
  # If you set this to False, Django will not use timezone-aware datetimes.
  USE_TZ = True
  
  # Absolute filesystem path to the directory that will hold user-uploaded files.
  # Example: "/home/media/media.lawrence.com/media/"
  MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
  
  # URL that handles the media served from MEDIA_ROOT. Make sure to use a
  # trailing slash.
  # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
  MEDIA_URL = "/site_media/media/"
  
  # Absolute path to the directory static files should be collected to.
  # Don"t put anything in this directory yourself; store your static files
  # in apps" "static/" subdirectories and in STATICFILES_DIRS.
  # Example: "/home/media/media.lawrence.com/static/"
  STATIC_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "static")
  
  # URL prefix for static files.
  # Example: "http://media.lawrence.com/static/"
  STATIC_URL = "/site_media/static/"
  
  # Additional locations of static files
  STATICFILES_DIRS = [
      os.path.join(PROJECT_ROOT, "static", "dist"),
  ]
  
  # List of finder classes that know how to find static files in
  # various locations.
  STATICFILES_FINDERS = [
      "django.contrib.staticfiles.finders.FileSystemFinder",
      "django.contrib.staticfiles.finders.AppDirectoriesFinder",
  ]
  
  STATICFILES_STORAGE = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
  
  if "SECRET_KEY" in os.environ:
      SECRET_KEY = os.environ["SECRET_KEY"]
  else:
      if not DEBUG:
          raise RuntimeError("missing SECRET_KEY environment variable")
      else:
          SECRET_KEY = "----dev-secret-key----"
  
  TEMPLATES = [
      {
          "BACKEND": "django.template.backends.django.DjangoTemplates",
          "DIRS": [
              os.path.join(PACKAGE_ROOT, "templates"),
          ],
          "APP_DIRS": True,
          "OPTIONS": {
              "debug": DEBUG,
              "context_processors": [
                  "django.contrib.auth.context_processors.auth",
                  "django.template.context_processors.debug",
                  "django.template.context_processors.i18n",
                  "django.template.context_processors.media",
                  "django.template.context_processors.static",
                  "django.template.context_processors.tz",
                  "django.template.context_processors.request",
                  "django.contrib.messages.context_processors.messages",
                  "account.context_processors.account",
                  "pinax_theme_bootstrap.context_processors.theme",
                  "scaife_viewer.context_processors.google_analytics",
              ],
          },
      },
  ]
  
  MIDDLEWARE = [
      "django.middleware.security.SecurityMiddleware",
      "django.middleware.common.CommonMiddleware",
      "whitenoise.middleware.WhiteNoiseMiddleware",
      "scaife_viewer.middleware.PerRequestMiddleware",
  ]
  if TRACING_ENABLED:
      MIDDLEWARE.append("opencensus.trace.ext.django.middleware.OpencensusMiddleware")
  
  PER_REQUEST_MIDDLEWARE = {
      "default": [
          "django.contrib.sessions.middleware.SessionMiddleware",
          "django.middleware.csrf.CsrfViewMiddleware",
          "django.contrib.auth.middleware.AuthenticationMiddleware",
          "django.contrib.sites.middleware.CurrentSiteMiddleware",
          "django.contrib.messages.middleware.MessageMiddleware",
          "django.middleware.clickjacking.XFrameOptionsMiddleware",
          "account.middleware.LocaleMiddleware",
      ],
      "api": [],
  }
  
  ROOT_URLCONF = "scaife_viewer.urls"
  
  # Python dotted path to the WSGI application used by Django's runserver.
  WSGI_APPLICATION = "scaife_viewer.wsgi.application"
  
  INSTALLED_APPS = [
      "django.contrib.admin",
      "django.contrib.auth",
      "django.contrib.contenttypes",
      "django.contrib.messages",
      "django.contrib.sessions",
      "django.contrib.sites",
      "django.contrib.staticfiles",
  
      # theme
      "bootstrapform",
      "pinax_theme_bootstrap",
  
      # external
      "account",
      "pinax.eventlog",
      "pinax.webanalytics",
      "raven.contrib.django.raven_compat",
      "oidc_provider",
      "opencensus.trace.ext.django",
      "letsencrypt",
  
      # project
      "scaife_viewer",
      "scaife_viewer.reading",
  ]
  
  # A sample logging configuration. The only tangible logging
  # performed by this configuration is to send an email to
  # the site admins on every HTTP 500 error when DEBUG=False.
  # See http://docs.djangoproject.com/en/dev/topics/logging for
  # more details on how to customize your logging configuration.
  LOGGING = {
      "version": 1,
      "disable_existing_loggers": False,
      "filters": {
          "require_debug_false": {
              "()": "django.utils.log.RequireDebugFalse"
          }
      },
      "handlers": {
          "mail_admins": {
              "level": "ERROR",
              "filters": ["require_debug_false"],
              "class": "django.utils.log.AdminEmailHandler"
          }
      },
      "loggers": {
          "django.request": {
              "handlers": ["mail_admins"],
              "level": "ERROR",
              "propagate": True,
          },
          "scaife_viewer.cts": {
              "level": "ERROR",
          },
      }
  }
  
  FIXTURE_DIRS = [
      os.path.join(PROJECT_ROOT, "fixtures"),
  ]
  
  EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
  
  LOCALE_PATHS = [
      os.path.join(BASE_DIR, "locale"),
  ]
  LANGUAGES = [
      ("de", "Deutsch"),
      ("en", "English"),
      ("fr", "français"),
      ("it", "italiano"),
  ]
  
  SESSION_COOKIE_NAME = "sv-sessionid"
  
  ACCOUNT_OPEN_SIGNUP = True
  ACCOUNT_EMAIL_UNIQUE = True
  ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = True
  ACCOUNT_LOGIN_REDIRECT_URL = "home"
  ACCOUNT_LOGOUT_REDIRECT_URL = "home"
  ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
  ACCOUNT_USE_AUTH_AUTHENTICATE = True
  ACCOUNT_LANGUAGES = LANGUAGES
  
  AUTHENTICATION_BACKENDS = [
      "account.auth_backends.UsernameAuthenticationBackend",
  ]
  
  LOGIN_URL = "account_login"
  
  OIDC_USERINFO = "scaife_viewer.oidc.userinfo"
  
  DEFAULT_FROM_EMAIL = "Scaife Viewer <perseus_webmaster@tufts.edu>"
  THEME_CONTACT_EMAIL = "perseus_webmaster@tufts.edu"
  
  EMAIL_BACKEND = os.environ.get("EMAIL_BACKEND", "django.core.mail.backends.console.EmailBackend")
  EMAIL_HOST = os.environ.get("EMAIL_HOST", "")
  EMAIL_PORT = os.environ.get("EMAIL_PORT", "")
  EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER", "")
  EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD", "")
  EMAIL_USE_TLS = True
  
  SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
  SECURE_SSL_REDIRECT = bool(int(os.environ.get("SECURE_SSL_REDIRECT", "0")))
  SECURE_REDIRECT_EXEMPT = [
      r"\.well-known/acme-challenge/.+",
  ]
  
  CACHES = {
      "default": {
          "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
      },
  }
  
  resolver = os.environ.get("CTS_RESOLVER", "api")
  if resolver == "api":
      CTS_API_ENDPOINT = os.environ.get("CTS_API_ENDPOINT", "https://scaife-cts-dev.perseus.org/api/cts")
      CTS_RESOLVER = {
          "type": "api",
          "kwargs": {
              "endpoint": CTS_API_ENDPOINT,
          },
      }
      CTS_LOCAL_TEXT_INVENTORY = "ti.xml" if DEBUG else None
  elif resolver == "local":
      CTS_LOCAL_DATA_PATH = os.environ["CTS_LOCAL_DATA_PATH"]
      CTS_RESOLVER = {
          "type": "local",
          "kwargs": {
              "data_path": CTS_LOCAL_DATA_PATH,
          },
      }
  
  if "SENTRY_DSN" in os.environ:
      RAVEN_CONFIG = {
          "dsn": os.environ["SENTRY_DSN"],
      }
  
  OPENCENSUS_TRACE = {
      "SAMPLER": "opencensus.trace.samplers.AlwaysOnSampler",
      "EXPORTER": "scaife_viewer.tracing.StackdriverExporter",
      "PROPAGATOR": "opencensus.trace.propagation.google_cloud_format.GoogleCloudFormatPropagator",
  }
  OPENCENSUS_TRACE_PARAMS = {
      "BLACKLIST_PATHS": [],
  }
  
  ELASTICSEARCH_URL = os.environ.get("ELASTICSEARCH_URL", "http://localhost:9200")
  