Package wtf :: Module init
[hide private]
[frames] | no frames]

Source Code for Module wtf.init

  1  # -*- coding: ascii -*- 
  2  u""" 
  3  :Copyright: 
  4   
  5   Copyright 2012 - 2014 
  6   Andr\xe9 Malo or his licensors, as applicable 
  7   
  8  :License: 
  9   
 10   Licensed under the Apache License, Version 2.0 (the "License"); 
 11   you may not use this file except in compliance with the License. 
 12   You may obtain a copy of the License at 
 13   
 14       http://www.apache.org/licenses/LICENSE-2.0 
 15   
 16   Unless required by applicable law or agreed to in writing, software 
 17   distributed under the License is distributed on an "AS IS" BASIS, 
 18   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 19   See the License for the specific language governing permissions and 
 20   limitations under the License. 
 21   
 22  ================== 
 23   Application Init 
 24  ================== 
 25   
 26  Meta config setup and managed applications helper. 
 27  """ 
 28  __author__ = u"Andr\xe9 Malo" 
 29  __docformat__ = "restructuredtext en" 
 30   
 31  import os as _os 
 32  import sys as _sys 
 33   
 34   
35 -def config(configfile, opts=None, dump=False):
36 """ 37 Initialize the configuration and apply basic parameters 38 39 The basic parameters are: 40 41 - The python path 42 - sys.checkinterval 43 - max descriptors 44 45 :Parameters: 46 `configfile` : ``str`` 47 Config file name (relative to the current working directory) 48 49 `opt` 50 Commandline options 51 52 `dump` : ``bool`` 53 Dump config and exit? If true, the effective config is dumped and the 54 process exits with return code 0. Default: false 55 56 :Return: Effective config 57 :Rtype: `` 58 """ 59 # pylint: disable = R0912 60 61 from wtf import config as _config 62 63 if configfile is None: 64 conf = _config.Config( 65 _os.path.normpath(_os.path.abspath(_os.getcwd())) 66 ) 67 else: 68 conf = _config.load(configfile) 69 70 if dump: 71 _config.dump(conf) 72 _sys.exit(0) 73 74 if 'wtf' in conf and 'pythonpath' in conf.wtf: 75 _sys.path = list(conf.wtf.pythonpath) + _sys.path 76 77 if opts is not None and opts.checkinterval: 78 checkinterval = opts.checkinterval 79 elif 'wtf' in conf: 80 checkinterval = conf.wtf('checkinterval', 0) 81 else: 82 checkinterval = 0 83 if checkinterval: 84 _sys.setcheckinterval(checkinterval) 85 86 if opts is not None and opts.max_descriptors: 87 from wtf import cmdline as _cmdline 88 max_descriptors = opts.max_descriptors 89 exc = _cmdline.CommandlineError 90 elif 'wtf' in conf: 91 max_descriptors = max(-1, int(conf.wtf('max_descriptors', 0))) 92 exc = _config.ConfigurationError 93 else: 94 max_descriptors = 0 95 if max_descriptors: 96 try: 97 import resource as _resource 98 except ImportError: 99 raise exc( 100 "Cannot set max descriptors: resource module not available" 101 ) 102 else: 103 try: 104 name = _resource.RLIMIT_NOFILE 105 except AttributeError: 106 try: 107 name = _resource.RLIMIT_OFILE 108 except AttributeError: 109 raise exc( 110 "Cannot set max descriptors: no rlimit constant found" 111 ) 112 _resource.setrlimit(name, (max_descriptors, max_descriptors)) 113 114 return conf
115 116
117 -def managed_app(configfile):
118 """ 119 Create a managed application 120 121 :Parameters: 122 `configfile` : ``str`` 123 Config file name 124 125 :Return: Application factory 126 :Rtype: callable 127 """ 128 from wtf import app as _app 129 130 return _app.factory(config(configfile), None, None)
131