Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / python / gnuradio / gr / prefs.py @ 41c94e0a

History | View | Annotate | Download (3.7 kB)

1 5d69a524 jcorgan
#
2 799654f0 jcorgan
# Copyright 2006,2009 Free Software Foundation, Inc.
3 5d69a524 jcorgan
# 
4 5d69a524 jcorgan
# This file is part of GNU Radio
5 5d69a524 jcorgan
# 
6 5d69a524 jcorgan
# GNU Radio is free software; you can redistribute it and/or modify
7 5d69a524 jcorgan
# it under the terms of the GNU General Public License as published by
8 937b719d eb
# the Free Software Foundation; either version 3, or (at your option)
9 5d69a524 jcorgan
# any later version.
10 5d69a524 jcorgan
# 
11 5d69a524 jcorgan
# GNU Radio is distributed in the hope that it will be useful,
12 5d69a524 jcorgan
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13 5d69a524 jcorgan
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 5d69a524 jcorgan
# GNU General Public License for more details.
15 5d69a524 jcorgan
# 
16 5d69a524 jcorgan
# You should have received a copy of the GNU General Public License
17 5d69a524 jcorgan
# along with GNU Radio; see the file COPYING.  If not, write to
18 86f5c924 eb
# the Free Software Foundation, Inc., 51 Franklin Street,
19 86f5c924 eb
# Boston, MA 02110-1301, USA.
20 5d69a524 jcorgan
# 
21 5d69a524 jcorgan
22 70dd1dc6 Eric Blossom
import gnuradio_core as gsp
23 5d69a524 jcorgan
_prefs_base = gsp.gr_prefs
24 5d69a524 jcorgan
25 5d69a524 jcorgan
26 5d69a524 jcorgan
import ConfigParser
27 5d69a524 jcorgan
import os
28 5d69a524 jcorgan
import os.path
29 5d69a524 jcorgan
import sys
30 5d69a524 jcorgan
31 5d69a524 jcorgan
32 5d69a524 jcorgan
def _user_prefs_filename():
33 5d69a524 jcorgan
    return os.path.expanduser('~/.gnuradio/config.conf')
34 5d69a524 jcorgan
        
35 5d69a524 jcorgan
def _sys_prefs_dirname():
36 3b0db383 jcorgan
    return gsp.prefsdir()
37 5d69a524 jcorgan
38 5d69a524 jcorgan
def _bool(x):
39 5d69a524 jcorgan
    """
40 5d69a524 jcorgan
    Try to coerce obj to a True or False
41 5d69a524 jcorgan
    """
42 5d69a524 jcorgan
    if isinstance(x, bool):
43 5d69a524 jcorgan
        return x
44 5d69a524 jcorgan
    if isinstance(x, (float, int)):
45 5d69a524 jcorgan
        return bool(x)
46 5d69a524 jcorgan
    raise TypeError, x
47 5d69a524 jcorgan
        
48 5d69a524 jcorgan
49 5d69a524 jcorgan
class _prefs(_prefs_base):
50 5d69a524 jcorgan
    """
51 5d69a524 jcorgan
    Derive our 'real class' from the stubbed out base class that has support
52 5d69a524 jcorgan
    for SWIG directors.  This allows C++ code to magically and transparently
53 5d69a524 jcorgan
    invoke the methods in this python class.
54 5d69a524 jcorgan
    """
55 5d69a524 jcorgan
    def __init__(self):
56 799654f0 jcorgan
        _prefs_base.__init__(self)
57 799654f0 jcorgan
        self.cp = ConfigParser.RawConfigParser()
58 799654f0 jcorgan
        self.__getattr__ = lambda self, name: getattr(self.cp, name)
59 5d69a524 jcorgan
60 5d69a524 jcorgan
    def _sys_prefs_filenames(self):
61 5d69a524 jcorgan
        dir = _sys_prefs_dirname()
62 5d69a524 jcorgan
        try:
63 5d69a524 jcorgan
            fnames = os.listdir(dir)
64 5d69a524 jcorgan
        except (IOError, OSError):
65 5d69a524 jcorgan
            return []
66 5d69a524 jcorgan
        fnames.sort()
67 5d69a524 jcorgan
        return [os.path.join(dir, f) for f in fnames]
68 5d69a524 jcorgan
69 5d69a524 jcorgan
    def _read_files(self):
70 5d69a524 jcorgan
        filenames = self._sys_prefs_filenames()
71 5d69a524 jcorgan
        filenames.append(_user_prefs_filename())
72 5d69a524 jcorgan
        #print "filenames: ", filenames
73 5d69a524 jcorgan
        self.cp.read(filenames)
74 5d69a524 jcorgan
75 5d69a524 jcorgan
    # ----------------------------------------------------------------
76 5d69a524 jcorgan
    # These methods override the C++ virtual methods of the same name
77 5d69a524 jcorgan
    # ----------------------------------------------------------------
78 5d69a524 jcorgan
    def has_section(self, section):
79 5d69a524 jcorgan
        return self.cp.has_section(section)
80 5d69a524 jcorgan
81 5d69a524 jcorgan
    def has_option(self, section, option):
82 5d69a524 jcorgan
        return self.cp.has_option(section, option)
83 5d69a524 jcorgan
84 5d69a524 jcorgan
    def get_string(self, section, option, default_val):
85 5d69a524 jcorgan
        try:
86 5d69a524 jcorgan
            return self.cp.get(section, option)
87 5d69a524 jcorgan
        except:
88 5d69a524 jcorgan
            return default_val
89 5d69a524 jcorgan
90 5d69a524 jcorgan
    def get_bool(self, section, option, default_val):
91 5d69a524 jcorgan
        try:
92 5d69a524 jcorgan
            return self.cp.getboolean(section, option)
93 5d69a524 jcorgan
        except:
94 5d69a524 jcorgan
            return default_val
95 5d69a524 jcorgan
96 5d69a524 jcorgan
    def get_long(self, section, option, default_val):
97 5d69a524 jcorgan
        try:
98 5d69a524 jcorgan
            return self.cp.getint(section, option)
99 5d69a524 jcorgan
        except:
100 5d69a524 jcorgan
            return default_val
101 5d69a524 jcorgan
        
102 5d69a524 jcorgan
    def get_double(self, section, option, default_val):
103 5d69a524 jcorgan
        try:
104 5d69a524 jcorgan
            return self.cp.getfloat(section, option)
105 5d69a524 jcorgan
        except:
106 5d69a524 jcorgan
            return default_val
107 5d69a524 jcorgan
    # ----------------------------------------------------------------
108 5d69a524 jcorgan
    #              End override of C++ virtual methods
109 5d69a524 jcorgan
    # ----------------------------------------------------------------
110 5d69a524 jcorgan
111 5d69a524 jcorgan
112 5d69a524 jcorgan
_prefs_db = _prefs()
113 5d69a524 jcorgan
114 5d69a524 jcorgan
# if GR_DONT_LOAD_PREFS is set, don't load them.
115 5d69a524 jcorgan
# (make check uses this to avoid interactions.)
116 5d69a524 jcorgan
if os.getenv("GR_DONT_LOAD_PREFS", None) is None:
117 5d69a524 jcorgan
    _prefs_db._read_files()
118 5d69a524 jcorgan
    
119 5d69a524 jcorgan
120 5d69a524 jcorgan
_prefs_base.set_singleton(_prefs_db)    # tell C++ what instance to use
121 5d69a524 jcorgan
122 5d69a524 jcorgan
def prefs():
123 5d69a524 jcorgan
    """
124 5d69a524 jcorgan
    Return the global preference data base
125 5d69a524 jcorgan
    """
126 5d69a524 jcorgan
    return _prefs_db