bugfix with binary field and wizard
[openerp-client.git] / bin / options.py
blobd8088a326f5973823539462fb1db7ed39404bc4f
1 # -*- encoding: utf-8 -*-
2 ##############################################################################
4 # Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
6 # $Id$
8 # WARNING: This program as such is intended to be used by professional
9 # programmers who take the whole responsability of assessing all potential
10 # consequences resulting from its eventual inadequacies and bugs
11 # End users who are looking for a ready-to-use solution with commercial
12 # garantees and support are strongly adviced to contract a Free Software
13 # Service Company
15 # This program is Free Software; you can redistribute it and/or
16 # modify it under the terms of the GNU General Public License
17 # as published by the Free Software Foundation; either version 2
18 # of the License, or (at your option) any later version.
20 # This program is distributed in the hope that it will be useful,
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 # GNU General Public License for more details.
25 # You should have received a copy of the GNU General Public License
26 # along with this program; if not, write to the Free Software
27 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 ##############################################################################
31 import ConfigParser,optparse
32 import os, sys
33 import gtk
34 import gettext
36 def get_home_dir():
37 """Return the closest possible equivalent to a 'home' directory.
38 For Posix systems, this is $HOME, and on NT it's $HOMEDRIVE\$HOMEPATH.
39 Currently only Posix and NT are implemented, a HomeDirError exception is
40 raised for all other OSes. """
42 if os.name == 'posix':
43 return os.path.expanduser('~')
44 elif os.name == 'nt':
45 try:
46 return os.path.join(os.environ['HOMEDRIVE'],os.environ['HOMEPATH'])
47 except:
48 try:
49 import _winreg as wreg
50 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
51 homedir = wreg.QueryValueEx(key,'Personal')[0]
52 key.Close()
53 return homedir
54 except:
55 return 'C:\\'
56 elif os.name == 'dos':
57 return 'C:\\'
58 else:
59 return '.'
61 class configmanager(object):
62 def __init__(self,fname=None):
63 self.options = {
64 'login.login': 'demo',
65 'login.server': 'localhost',
66 'login.port': '8070',
67 'login.protocol': 'socket://',
68 'login.db': 'terp',
69 'client.toolbar': 'both',
70 'client.theme': 'none',
71 'path.share': os.path.join(sys.prefix, 'share/openerp-client/'),
72 'path.pixmaps': os.path.join(sys.prefix, 'share/pixmaps/openerp-client/'),
73 'tip.autostart': False,
74 'tip.position': 0,
75 'survey.position': 0,
76 'form.autosave': False,
77 'printer.preview': True,
78 'printer.softpath': 'none',
79 'printer.softpath_html': 'none',
80 'printer.path': 'none',
81 'logging.logger': '',
82 'logging.level': 'DEBUG',
83 'logging.output': 'stdout',
84 'logging.verbose': False,
85 'client.default_path': os.path.expanduser('~'),
86 'support.recipient': 'support@openerp.com',
87 'support.support_id' : '',
88 'form.toolbar': True,
89 'client.form_tab': 'top',
90 'client.form_tab_orientation': 0,
91 'client.lang': False,
92 'client.filetype': {},
93 'help.index': 'http://www.openerp.com/documentation/user-manual/',
94 'help.context': 'http://www.openerp.com/scripts/context_index.php'
96 parser = optparse.OptionParser(version=_("OpenERP Client %s" % openerp_version))
97 parser.add_option("-c", "--config", dest="config",help=_("specify alternate config file"))
98 parser.add_option("-v", "--verbose", action="store_true", default=False, dest="verbose", help=_("enable basic debugging"))
99 parser.add_option("-d", "--log", dest="log_logger", default='', help=_("specify channels to log"))
100 parser.add_option("-l", "--log-level", dest="log_level",default='ERROR', help=_("specify the log level: INFO, DEBUG, WARNING, ERROR, CRITICAL"))
101 parser.add_option("-u", "--user", dest="login", help=_("specify the user login"))
102 parser.add_option("-p", "--port", dest="port", help=_("specify the server port"))
103 parser.add_option("-s", "--server", dest="server", help=_("specify the server ip/name"))
104 (opt, args) = parser.parse_args()
106 self.rcfile = self._get_rcfile(fname, opt.config)
107 self.load()
109 if opt.verbose:
110 self.options['logging.verbose']=True
111 self.options['logging.logger'] = opt.log_logger
112 self.options['logging.level'] = opt.log_level
114 for arg in ('login', 'port', 'server'):
115 if getattr(opt, arg):
116 self.options['login.'+arg] = getattr(opt, arg)
118 def _get_rcfile(self, fname, optconfigfile):
119 rcfile = fname or optconfigfile or os.environ.get('OPENERPRC') or os.path.join(get_home_dir(), '.openerprc')
120 if not os.path.exists(rcfile):
121 import logging
122 log = logging.getLogger('common.options')
123 additional_info = ""
124 if optconfigfile:
125 additional_info = " Be sure to specify an absolute path name if you are using the '-c' command line switch"
126 log.warn('Config file %s does not exist !%s'% (rcfile, additional_info ))
127 return os.path.abspath(rcfile)
129 def save(self, fname = None):
130 try:
131 p = ConfigParser.ConfigParser()
132 sections = {}
133 for o in self.options.keys():
134 if not len(o.split('.'))==2:
135 continue
136 osection,oname = o.split('.')
137 if not p.has_section(osection):
138 p.add_section(osection)
139 p.set(osection,oname,self.options[o])
140 p.write(file(self.rcfile,'wb'))
141 except:
142 import logging
143 log = logging.getLogger('common.options')
144 log.warn('Unable to write config file %s !'% (self.rcfile,))
145 return True
148 def load(self, fname=None):
149 try:
150 self.rcexist = False
151 if not os.path.isfile(self.rcfile):
152 self.save()
153 return False
154 self.rcexist = True
156 p = ConfigParser.ConfigParser()
157 p.read([self.rcfile])
158 for section in p.sections():
159 for (name,value) in p.items(section):
160 if value=='True' or value=='true':
161 value = True
162 if value=='False' or value=='false':
163 value = False
164 self.options[section+'.'+name] = value
165 except Exception, e:
166 import logging
167 log = logging.getLogger('common.options')
168 log.warn('Unable to read config file %s !'% (self.rcfile,))
169 return True
171 def __setitem__(self, key, value):
172 self.options[key]=value
174 def __getitem__(self, key):
175 return self.options[key]
177 options = configmanager()
180 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: