1
2
3
4
5
6
7
8
9
10
11
12
13 """
14 Holds Run-time Parameters
15
16 Order of precedence:
17 1. set(param) - Command line parameters
18 2. Config files as constructor parameters
19 3. self.params - Defaults
20 """
21 from os.path import dirname, abspath, join, isdir, isfile, expanduser
22 import sys
23 import libxml2
24 import logging
25
26 from pyx12.errors import EngineError
27
28 NodeType = {'element_start': 1, 'element_end': 15, 'attrib': 2, 'text': 3,
29 'CData': 4, 'entity_ref': 5, 'entity_decl':6, 'pi': 7, 'comment': 8,
30 'doc': 9, 'dtd': 10, 'doc_frag': 11, 'notation': 12}
31
33 """
34 Base class for parameters
35 """
37 self.logger = logging.getLogger('pyx12.params')
38 self.params = {}
39
40 base_dir = dirname(dirname(abspath(sys.argv[0])))
41 map_path = join(base_dir, 'map')
42
43 if not isdir(map_path):
44 map_path = join(sys.prefix, 'share', 'pyx12', 'map')
45 self.params['map_path'] = map_path
46 self.params['pickle_path'] = map_path
47 self.params['exclude_external_codes'] = None
48 self.params['ignore_syntax'] = False
49 self.params['charset'] = 'E'
50 self.params['ignore_codes'] = False
51 self.params['ignore_ext_codes'] = False
52 self.params['skip_html'] = False
53 self.params['skip_997'] = False
54 self.params['simple_dtd'] = ''
55 self.params['idtag_dtd'] = ''
56 self.params['idtagqual_dtd'] = ''
57 self.params['xmlout'] = 'simple'
58
59 self.params['xslt_files'] = []
60
61 - def get(self, option):
62 """
63 Get the value of the parameter specified by option
64 @param option: Option name
65 @type option: string
66 """
67 if option in self.params.keys():
68 return self.params[option]
69 else:
70 return None
71
72 - def set(self, option, value):
73 """
74 Set the value of the parameter specified by option
75 @param option: Option name
76 @type option: string
77 @param value: Parameter value
78 @type value: string
79 """
80 if value == '':
81 self.params[option] = None
82 else:
83 self.params[option] = value
84
86 """
87 Read program configuration from an XML file
88
89 @param filename: XML file
90 @type filename: string
91 @return: None
92 """
93 if not isfile(filename):
94 raise EngineError, 'Read of configuration file "%s" failed' % (filename)
95 try:
96 reader = libxml2.newTextReaderFilename(filename)
97 ret = reader.Read()
98 while ret == 1:
99 tmpNodeType = reader.NodeType()
100 if tmpNodeType == NodeType['element_start']:
101 cur_name = reader.Name()
102 if cur_name == 'param':
103 option = None
104 value = None
105 valtype = None
106 while reader.MoveToNextAttribute():
107 if reader.Name() == 'name':
108 option = reader.Value()
109 elif tmpNodeType == NodeType['element_end']:
110 if option is not None:
111 self._set_option(option, value, valtype)
112 elif tmpNodeType == NodeType['text']:
113 if cur_name == 'value':
114 value = reader.Value()
115 elif cur_name == 'type':
116 valtype = reader.Value()
117 ret = reader.Read()
118 except:
119 self.logger.error('Read of configuration file "%s" failed' % \
120 (filename))
121 raise
122
124 """
125 Set the value of the parameter specified by option
126 @param option: Option name
127 @type option: string
128 @param value: Parameter value
129 @type value: string
130 @param valtype: Parameter type
131 @type valtype: string
132 """
133 if value == '':
134 value = None
135 if valtype == 'boolean':
136 if value in ('False', 'F'):
137 self.params[option] = False
138 else:
139 self.params[option] = True
140 else:
141 try:
142 if self.params[option] != value:
143 self.params[option] = value
144
145
146 except:
147 self.params[option] = value
148
149
150
151
152
153
155 """
156 Read options from XML configuration files
157 """
159 ParamsBase.__init__(self)
160 config_files = [join(sys.prefix, 'etc/pyx12.conf.xml'), \
161 expanduser('~/.pyx12.conf.xml')]
162 if config_file:
163 config_files.append(config_file)
164 for filename in config_files:
165 if isfile(filename):
166 self.logger.debug('Read param file: %s' % (filename))
167 self._read_config_file(filename)
168
170 """
171 Read options from XML configuration files
172 """
174 ParamsBase.__init__(self)
175 config_files = [join(sys.prefix, 'etc/pyx12.conf.xml')]
176 if config_file:
177 config_files.append(config_file)
178 for filename in config_files:
179 if isfile(filename):
180 self.logger.debug('Read param file: %s' % (filename))
181 self._read_config_file(filename)
182
183 if sys.platform == 'win32':
184 params = ParamsWindows
185 else:
186 params = ParamsUnix
187