From ac22d08cb39f64b3c271413ba2f673ddedfb0059 Mon Sep 17 00:00:00 2001 From: Diane Trout Date: Tue, 17 Dec 2013 11:15:09 -0800 Subject: [PATCH] Start simplyfing settings by using from settings_local import * pattern. This should be a lot less ugly than my previous implementation using the ini file. However there are still settings that need to be migrated over. --- htsworkflow/settings.py | 301 +++++++++------------------------------- 1 file changed, 63 insertions(+), 238 deletions(-) diff --git a/htsworkflow/settings.py b/htsworkflow/settings.py index ee1cb6a..c366ce3 100644 --- a/htsworkflow/settings.py +++ b/htsworkflow/settings.py @@ -1,280 +1,105 @@ """ -Generate settings for the Django Application. +Django settings for wsgiexample project. -To make it easier to customize the application the settings can be -defined in a configuration file read by ConfigParser. - -The options understood by this module are (with their defaults): - - [frontend] - email_host=localhost - email_port=25 - database= - - [database_name] - engine=sqlite3 - name=/path/to/database - - [admins] - #name1=email1 - - [allowed_hosts] - #name1=ip - localhost=127.0.0.1 - - [allowed_analysis_hosts] - #name1=ip - localhost=127.0.0.1 +For more information on this file, see +https://docs.djangoproject.com/en/1.6/topics/settings/ +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.6/ref/settings/ """ -import ConfigParser -import logging -import os -import shlex -import htsworkflow -import django -from django.conf import global_settings - -from htsworkflow.util.api import make_django_secret_key - -HTSWORKFLOW_ROOT = os.path.abspath(os.path.split(htsworkflow.__file__)[0]) -LOGGER = logging.getLogger(__name__) - -# make epydoc happy -__docformat__ = "restructuredtext en" -def options_to_list(options, dest, section_name, option_name): - """ - Load a options from section_name and store in a dictionary - """ - if options.has_option(section_name, option_name): - opt = options.get(section_name, option_name) - dest.extend( shlex.split(opt) ) - -def options_to_dict(dest, section_name): - """ - Load a options from section_name and store in a dictionary - """ - if options.has_section(section_name): - for name in options.options(section_name): - dest[name] = options.get(section_name, name) - -# define your defaults here -options = ConfigParser.SafeConfigParser() - -def save_options(filename, options): - try: - ini_stream = open(filename, 'w') - options.write(ini_stream) - ini_stream.close() - except IOError, e: - LOGGER.debug("Error saving setting: %s" % (str(e))) +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -INI_FILE = options.read([os.path.expanduser("~/.htsworkflow.ini"), - '/etc/htsworkflow.ini',]) -# OptionParser will use the dictionary passed into the config parser as -# 'Default' values in any section. However it still needs an empty section -# to exist in order to retrieve anything. -if not options.has_section('frontend'): - options.add_section('frontend') -if not options.has_section('bcprinter'): - options.add_section('bcprinter') +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'c=5&609$7)bm_u+3$2bi=ida$*a)c1(cp_0siua7uyww!1qfg_' -# Django settings for elandifier project. +DEFAULT_API_KEY = 'n7HsXGHIi0vp9j5u4TIRJyqAlXYc4wrH' +# SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -TEMPLATE_DEBUG = DEBUG -ADMINS = [] -options_to_list(options, ADMINS, 'frontend', 'admins') +TEMPLATE_DEBUG = True -MANAGERS = [] -options_to_list(options, MANAGERS, 'frontend', 'managers') +ALLOWED_HOSTS = ['jumpgate.caltech.edu'] -if options.has_option('front', 'default_pm'): - DEFAULT_PM=int(options.get('frontend', 'default_pm')) -else: - DEFAULT_PM=5 +# Application definition AUTHENTICATION_BACKENDS = ( 'htsworkflow.frontend.samples.auth_backend.HTSUserModelBackend', ) CUSTOM_USER_MODEL = 'samples.HTSUser' -EMAIL_HOST='localhost' -if options.has_option('frontend', 'email_host'): - EMAIL_HOST = options.get('frontend', 'email_host') - -EMAIL_PORT = 25 -if options.has_option('frontend', 'email_port'): - EMAIL_PORT = int(options.get('frontend', 'email_port')) +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'django.contrib.humanize', -if options.has_option('frontend', 'notification_sender'): - NOTIFICATION_SENDER = options.get('frontend', 'notification_sender') -else: - NOTIFICATION_SENDER = "noreply@example.com" -NOTIFICATION_BCC = [] -options_to_list(options, NOTIFICATION_BCC, 'frontend', 'notification_bcc') + 'htsworkflow.frontend.eland_config', + 'htsworkflow.frontend.samples', + 'htsworkflow.frontend.experiments', + 'htsworkflow.frontend.inventory', + 'htsworkflow.frontend.bcmagic', + 'htsworkflow.frontend.labels', +) -if not options.has_option('frontend', 'database'): - raise ConfigParser.NoSectionError( - "Please define [frontend] database=
") +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) -database_section = options.get('frontend', 'database') +TEMPLATE_DIRS = ( + os.path.join(BASE_DIR, 'htsworkflow', 'frontend', 'templates'), + os.path.join(BASE_DIR, 'htsworkflow', 'templates'), +) -if not options.has_section(database_section): - raise ConfigParser.NoSectionError( - "No database= defined") +ROOT_URLCONF = 'htsworkflow.frontend.urls' +#ROOT_URLCONF='wsgiexample.urls' -# 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. -DATABASE_ENGINE = options.get(database_section, 'engine') -DATABASE_NAME = options.get(database_section, 'name') -if options.has_option(database_section, 'user'): - DATABASE_USER = options.get(database_section, 'user') -if options.has_option(database_section, 'host'): - DATABASE_HOST = options.get(database_section, 'host') -if options.has_option(database_section, 'port'): - DATABASE_PORT = options.get(database_section, 'port') +WSGI_APPLICATION = 'htsworkflow.frontend.wsgi.application' -if options.has_option(database_section, 'password_file'): - password_file = options.get(database_section, 'password_file') - DATABASE_PASSWORD = open(password_file,'r').readline() -elif options.has_option(database_section, 'password'): - DATABASE_PASSWORD = options.get(database_section, 'password') +# Database +# https://docs.djangoproject.com/en/1.6/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': DATABASE_NAME, + 'NAME': os.path.join(BASE_DIR, 'fctracker.db'), } } -# Local time zone for this installation. Choices can be found here: -# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE -# although not all variations may be possible on all operating systems. -# If running in a Windows environment this must be set to the same as your -# system time zone. -if options.has_option('frontend', 'time_zone'): - TIME_ZONE = options.get('frontend', 'time_zone') -else: - TIME_ZONE = 'America/Los_Angeles' +# Internationalization +# https://docs.djangoproject.com/en/1.6/topics/i18n/ -# Language code for this installation. All choices can be found here: -# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes -# http://blogs.law.harvard.edu/tech/stories/storyReader$15 LANGUAGE_CODE = 'en-us' -SITE_ID = 1 +TIME_ZONE = 'UTC' -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. USE_I18N = True -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = os.path.join(HTSWORKFLOW_ROOT, 'frontend', 'static', '') - -# URL that handles the media served from MEDIA_ROOT. -# Example: "http://media.lawrence.com" -MEDIA_URL = '/static/' - -# URL prefix for static media -- CSS, JavaScript and images. Make sure to use a -# trailing slash. -STATIC_URL = '/media/' - -# Make this unique, and don't share it with anybody. -if not options.has_option('frontend', 'secret'): - options.set('frontend', 'secret_key', make_django_secret_key(458)) - save_options(INI_FILE[0], options) -SECRET_KEY = options.get('frontend', 'secret_key') - -# some of our urls need an api key -DEFAULT_API_KEY = 'n7HsXGHIi0vp9j5u4TIRJyqAlXYc4wrH' - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -) - -MIDDLEWARE_CLASSES = ( - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.doc.XViewMiddleware', -) - -TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( - 'htsworkflow.frontend.thispage.thispage', -) -ROOT_URLCONF = 'htsworkflow.frontend.urls' - -TEMPLATE_DIRS = ( - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. - '/usr/share/python-support/python-django/django/contrib/admin/templates', - #'/usr/lib/pymodules/python2.6/django/contrib/admin/templates/', - os.path.join(HTSWORKFLOW_ROOT, 'frontend', 'templates'), - os.path.join(HTSWORKFLOW_ROOT, 'templates'), -) - -INSTALLED_APPS = ( - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.staticfiles', - 'django.contrib.humanize', - 'django.contrib.sessions', - 'django.contrib.sites', - 'htsworkflow.frontend.eland_config', - 'htsworkflow.frontend.samples', - # modules from htsworkflow branch - 'htsworkflow.frontend.experiments', - 'htsworkflow.frontend.analysis', - 'htsworkflow.frontend.reports', - 'htsworkflow.frontend.inventory', - 'htsworkflow.frontend.bcmagic', - 'htsworkflow.frontend.labels', -) - -# Project specific settings +USE_L10N = True -ALLOWED_IPS={'127.0.0.1': '127.0.0.1'} -options_to_dict(ALLOWED_IPS, 'allowed_hosts') +USE_TZ = True -ALLOWED_ANALYS_IPS = {'127.0.0.1': '127.0.0.1'} -options_to_dict(ALLOWED_ANALYS_IPS, 'allowed_analysis_hosts') -#UPLOADTO_HOME = os.path.abspath('../../uploads') -#UPLOADTO_CONFIG_FILE = os.path.join(UPLOADTO_HOME, 'eland_config') -#UPLOADTO_ELAND_RESULT_PACKS = os.path.join(UPLOADTO_HOME, 'eland_results') -#UPLOADTO_BED_PACKS = os.path.join(UPLOADTO_HOME, 'bed_packs') -# Where "results_dir" means directory with all the flowcells -if options.has_option('frontend', 'results_dir'): - RESULT_HOME_DIR=os.path.expanduser(options.get('frontend', 'results_dir')) -else: - RESULT_HOME_DIR='/tmp' -if options.has_option('frontend', 'link_flowcell_storage_device_url'): - LINK_FLOWCELL_STORAGE_DEVICE_URL = options.get('frontend', - 'link_flowcell_storage_device_url') -else: - LINK_FLOWCELL_STORAGE_DEVICE_URL = None -# PORT 9100 is default for Zebra tabletop/desktop printers -# PORT 6101 is default for Zebra mobile printers -BCPRINTER_PRINTER1_HOST = None -if options.has_option('bcprinter', 'printer1_host'): - BCPRINTER_PRINTER1_HOST = options.get('bcprinter', 'printer1_host') -BCPRINTER_PRINTER1_PORT=9100 -if options.has_option('bcprinter', 'printer1_port'): - BCPRINTER_PRINTER1_PORT = int(options.get('bcprinter', 'printer1_port')) -BCPRINTER_PRINTER2_HOST = None -if options.has_option('bcprinter', 'printer2_host'): - BCPRINTER_PRINTER1_HOST = options.get('bcprinter', 'printer2_host') -BCPRINTER_PRINTER2_PORT=9100 -if options.has_option('bcprinter', 'printer2_port'): - BCPRINTER_PRINTER2_PORT = int(options.get('bcprinter', 'printer2_port')) +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.6/howto/static-files/ +STATIC_URL = '/static/' +try: + # allow local customizations + from settings_local import * +except ImportError as e: + pass \ No newline at end of file -- 2.30.2