@@ -123,6 +123,36 @@ def default_btc_dir():
123123 return os .path .expanduser ('~/.bitcoin' )
124124
125125
126+ def parse_conf_file (file_object ):
127+ conf = {}
128+ for line in file_object .readlines ():
129+ if '#' in line :
130+ line = line [:line .index ('#' )]
131+ if '=' not in line :
132+ continue
133+ k , v = line .split ('=' , 1 )
134+ conf [k .strip ()] = v .strip ()
135+ return conf
136+
137+
138+ def get_authpair (conf , network , btc_conf_file ):
139+ cookie_dir = conf .get ('datadir' , os .path .dirname (btc_conf_file ))
140+ if network != "mainnet" :
141+ cookie_dir = os .path .join (cookie_dir , network )
142+ cookie_file = os .path .join (cookie_dir , ".cookie" )
143+
144+ try :
145+ with open (cookie_file , 'r' ) as fd :
146+ return fd .read ()
147+ except IOError as err :
148+ if 'rpcpassword' in conf :
149+ return "%s:%s" % (conf ['rpcuser' ], conf ['rpcpassword' ])
150+
151+ raise ValueError ('Cookie file unusable (%s) and rpcpassword '
152+ 'not specified in the configuration file: %r'
153+ % (err , btc_conf_file ))
154+
155+
126156class BaseProxy (object ):
127157 """Base JSON-RPC proxy class. Contains only private methods; do not use
128158 directly."""
@@ -151,14 +181,7 @@ def __init__(self,
151181 # Extract contents of bitcoin.conf to build service_url
152182 try :
153183 with open (btc_conf_file , 'r' ) as fd :
154- for line in fd .readlines ():
155- if '#' in line :
156- line = line [:line .index ('#' )]
157- if '=' not in line :
158- continue
159- k , v = line .split ('=' , 1 )
160- conf [k .strip ()] = v .strip ()
161-
184+ conf .update (parse_conf_file (fd ))
162185 # Treat a missing bitcoin.conf as though it were empty
163186 except FileNotFoundError :
164187 pass
@@ -171,19 +194,7 @@ def __init__(self,
171194 service_url = ('%s://%s:%d' %
172195 ('http' , conf ['rpchost' ], conf ['rpcport' ]))
173196
174- cookie_dir = conf .get ('datadir' , os .path .dirname (btc_conf_file ))
175- if bitcoin .params .NAME != "mainnet" :
176- cookie_dir = os .path .join (cookie_dir , bitcoin .params .NAME )
177- cookie_file = os .path .join (cookie_dir , ".cookie" )
178- try :
179- with open (cookie_file , 'r' ) as fd :
180- authpair = fd .read ()
181- except IOError as err :
182- if 'rpcpassword' in conf :
183- authpair = "%s:%s" % (conf ['rpcuser' ], conf ['rpcpassword' ])
184-
185- else :
186- raise ValueError ('Cookie file unusable (%s) and rpcpassword not specified in the configuration file: %r' % (err , btc_conf_file ))
197+ authpair = get_authpair (conf , bitcoin .params .NAME , btc_conf_file )
187198
188199 else :
189200 url = urlparse .urlparse (service_url )
0 commit comments