[frontend]
email_host=localhost
email_port=25
- database_engine=sqlite3
- database_name=/path/to/db
+ database=<section_name>
+
+ [database_name]
+ engine=sqlite3
+ name=/path/to/database
[admins]
#name1=email1
"""
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"
dest[name] = options.get(section_name, name)
# define your defaults here
-options = ConfigParser.SafeConfigParser(
- { 'email_host': 'localhost',
- 'email_port': '25',
- 'database_engine': 'sqlite3',
- 'database_name':
- os.path.join(HTSWORKFLOW_ROOT, '..', 'fctracker.db'),
- 'time_zone': 'America/Los_Angeles',
- 'default_pm': '5',
- 'link_flowcell_storage_device_url': "http://localhost:8000/inventory/lts/link/",
- 'printer1_host': '127.0.0.1',
- 'printer1_port': '9100',
- 'printer2_host': '127.0.0.1',
- 'printer2_port': '9100',
- })
-
-options.read([os.path.expanduser("~/.htsworkflow.ini"),
- '/etc/htsworkflow.ini',])
+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)))
+
+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
MANAGERS = []
options_to_list(options, MANAGERS, 'frontend', 'managers')
-DEFAULT_PM=int(options.get('frontend', 'default_pm'))
+if options.has_option('front', 'default_pm'):
+ DEFAULT_PM=int(options.get('frontend', 'default_pm'))
+else:
+ DEFAULT_PM=5
AUTHENTICATION_BACKENDS = (
'htsworkflow.frontend.samples.auth_backend.HTSUserModelBackend', )
CUSTOM_USER_MODEL = 'samples.HTSUser'
-EMAIL_HOST = options.get('frontend', 'email_host')
-EMAIL_PORT = int(options.get('frontend', 'email_port'))
+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'))
if options.has_option('frontend', 'notification_sender'):
NOTIFICATION_SENDER = options.get('frontend', 'notification_sender')
NOTIFICATION_BCC = []
options_to_list(options, NOTIFICATION_BCC, 'frontend', 'notification_bcc')
-database_section = options.get('frontend', 'database', 'database')
+if not options.has_option('frontend', 'database'):
+ raise ConfigParser.NoSectionError(
+ "Please define [frontend] database=<Section>")
+
+database_section = options.get('frontend', 'database')
if not options.has_section(database_section):
raise ConfigParser.NoSectionError(
elif options.has_option(database_section, 'password'):
DATABASE_PASSWORD = options.get(database_section, 'password')
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': DATABASE_NAME,
+ }
+}
+
# 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.
-TIME_ZONE = options.get('frontend', 'time_zone')
+if options.has_option('frontend', 'time_zone'):
+ TIME_ZONE = options.get('frontend', 'time_zone')
+else:
+ TIME_ZONE = 'America/Los_Angeles'
# Language code for this installation. All choices can be found here:
# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
# Example: "http://media.lawrence.com"
MEDIA_URL = '/static/'
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# URL prefix for static media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = '/media/'
+STATIC_URL = '/media/'
# Make this unique, and don't share it with anybody.
-SECRET_KEY = '(ekv^=gf(j9f(x25@a7r+8)hqlz%&_1!tw^75l%^041#vi=@4n'
+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.load_template_source',
- 'django.template.loaders.app_directories.load_template_source',
-# 'django.template.loaders.eggs.load_template_source',
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
- 'django.contrib.csrf.middleware.CsrfMiddleware',
+ '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',
)
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
+ 'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sessions',
'django.contrib.sites',
'htsworkflow.frontend.inventory',
'htsworkflow.frontend.bcmagic',
'htsworkflow.frontend.labels',
- 'django.contrib.databrowse',
)
# Project specific settings
else:
RESULT_HOME_DIR='/tmp'
-LINK_FLOWCELL_STORAGE_DEVICE_URL = options.get('frontend', 'link_flowcell_storage_device_url')
+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 = options.get('bcprinter', 'printer1_host')
-BCPRINTER_PRINTER1_PORT = int(options.get('bcprinter', 'printer1_port'))
-BCPRINTER_PRINTER2_HOST = options.get('bcprinter', 'printer2_host')
-BCPRINTER_PRINTER2_PORT = int(options.get('bcprinter', 'printer2_port'))
+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'))