forked from timotheus/ebaysdk-python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.py
98 lines (75 loc) · 2.9 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# -*- coding: utf-8 -*-
'''
© 2012-2013 eBay Software Foundation
Authored by: Tim Keefer
Licensed under CDDL 1.0
'''
import os
import yaml
from ebaysdk import log
from ebaysdk.exception import ConnectionConfigError
class Config(object):
"""Config Class for all APIs connections
>>> c = Config(domain='api.ebay.com')
>>> print(c.file())
ebay.yaml
>>> c.set('fname', 'tim')
>>> c.get('fname')
'tim'
>>> c.get('missingkey', 'defaultvalue')
'defaultvalue'
>>> c.set('number', 22)
>>> c.get('number')
22
"""
def __init__(self, domain, connection_kwargs=dict(), config_file='ebay.yaml'):
self.config_file=config_file
self.domain=domain
self.values=dict()
self.config_file_used=[]
self.connection_kwargs=connection_kwargs
# populate defaults
self._populate_yaml_defaults()
def _populate_yaml_defaults(self):
"Returns a dictionary of YAML defaults."
# check for absolute path
if self.config_file and os.path.exists(self.config_file):
self.config_file_used=self.config_file
fhandle = open(self.config_file, "r")
dataobj = yaml.load(fhandle.read())
for k, val in dataobj.get(self.domain, {}).items():
self.set(k, val)
return self
# check other directories
dirs = ['.', os.path.expanduser('~'), '/etc']
for mydir in dirs:
myfile = "%s/%s" % (mydir, self.config_file)
if os.path.exists(myfile):
self.config_file_used=myfile
fhandle = open(myfile, "r")
dataobj = yaml.load(fhandle.read())
for k, val in dataobj.get(self.domain, {}).items():
self.set(k, val)
return self
if self.config_file:
raise ConnectionConfigError('config file %s not found' % self.config_file)
def file(self):
return self.config_file_used
def get(self, cKey, defaultValue=None):
#log.debug('get: %s=%s' % (cKey, self.values.get(cKey, defaultValue)))
return self.values.get(cKey, defaultValue)
def set(self, cKey, defaultValue, force=False):
if force:
#log.debug('set (force): %s=%s' % (cKey, defaultValue))
self.values.update({cKey: defaultValue})
elif cKey in self.connection_kwargs and self.connection_kwargs[cKey] is not None:
#log.debug('set: %s=%s' % (cKey, self.connection_kwargs[cKey]))
self.values.update({cKey: self.connection_kwargs[cKey]})
# otherwise, use yaml default and then fall back to
# the default set in the __init__()
else:
if not cKey in self.values:
#log.debug('set: %s=%s' % (cKey, defaultValue))
self.values.update({cKey: defaultValue})
else:
pass