source: nappy/trunk/nappy/utils/parse_config.py @ 3988

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/nappy/trunk/nappy/utils/parse_config.py@3988
Revision 3988, 3.4 KB checked in by astephen, 12 years ago (diff)

Further nappy work to get comments inserted in correct place.

Line 
1"""
2parse_config.py
3===================
4
5Parses config file for nappy.
6
7"""
8
9# Standard library imports
10import ConfigParser
11import os
12
13# Global variables
14base_dir = os.environ.get("NAPPY_BASE_DIR", ".." + os.path.sep + "..")
15config_file = os.path.join(base_dir, "nappy.ini")
16config_dict = None
17annotations_config_dict = None
18attributes_config_dict = None
19
20class MyCasePreservingConfigParser(ConfigParser.ConfigParser):
21    optionxform = str
22
23def makeConfigDict(cf=config_file):
24    """
25    Parses config file and returns dictionary of sub-dictionaries
26    for each section holding Keyword-Value pairs.
27    """
28    d = {}
29    conf = MyCasePreservingConfigParser()
30    conf.read(cf)
31
32    # get all sections and content
33    for section in conf.sections():
34        d[section] = {}
35        for item in conf.options(section):
36            value = conf.get(section, item)
37            if value.find("__space__") > -1:
38                value = value.replace("__space__", " ")
39
40            if item.find("&") > -1:
41                item = tuple(item.split("&"))
42            if value.find("&") > -1:
43                value = tuple(value.split("&"))
44            d[section][item] = value
45
46    return d
47
48
49def getConfigDict(cf=config_file):
50    "Checks if already made and only makes if required."
51    global config_dict
52    if config_dict == None:
53        config_dict = makeConfigDict(cf)
54    return config_dict
55
56
57def makeAnnotationsConfigDict(af):
58    """
59    Parses annotations config file and returns dictionary of annotations.
60    """
61    ad = {}
62    conf = MyCasePreservingConfigParser()
63    conf.read(af)
64
65    # Load up dict
66    for item in conf.options("annotations"):
67        value = conf.get("annotations", item)
68        ad[item] = value
69
70    return ad
71
72
73def getAnnotationsConfigDict():
74    "Checks if already made and only makes if required."
75    config_dict = getConfigDict()
76
77    annotations_config_file = os.environ.get("NAPPY_ANNOTATIONS", None) or \
78                                  config_dict["main"]["annotations_file"]
79
80    af = os.path.join(base_dir, annotations_config_file)
81    global annotations_config_dict
82
83    if annotations_config_dict == None:
84        annotations_config_dict = makeAnnotationsConfigDict(af)
85
86    return annotations_config_dict
87
88
89def makeLocalAttributesConfigDict(laf):
90    """
91    Parses local attributes config file and returns dictionary.
92    """
93    lad = {}
94    conf = MyCasePreservingConfigParser()
95    conf.read(laf)
96
97    # Load up dict
98    for sect in ("nc_attributes", "na_attributes"):
99        lad[sect] = {}
100        for item in conf.options(sect):
101            value = conf.get(sect, item)
102            print value
103            lad[sect][item] = value
104
105    return lad
106
107
108def getLocalAttributesConfigDict():
109    "Checks if already made and only makes if required."
110    config_dict = getConfigDict()
111
112    local_attributes_config_file = os.environ.get("NAPPY_LOCAL_ATTRIBUTES", None) or \
113                                  config_dict["main"]["local_attributes_file"]
114   
115    laf = os.path.join(base_dir, local_attributes_config_file)
116    global attributes_config_dict
117
118    if attributes_config_dict == None:
119        attributes_config_dict = makeLocalAttributesConfigDict(laf)
120    return attributes_config_dict
121
122
123
124if __name__=="__main__":
125
126    print getConfigDict()
127    print getAnnotationsConfigDict()
128    print getLocalAttributesConfigDict()
129
Note: See TracBrowser for help on using the repository browser.