Looks great, db.
Just a minor recommendation: given the ease with which you can catch errors in python, you might consider an except(BitcoinError) clause to gracefully fail when you have insufficient funds, or other error. Your original post showed this:
>>> bitcoin.sendtoaddress("1Nsq3itZULUZjtZGcjNrtZtwT8aMsHu1R1", 1000000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "bitcoin.py", line 73, in sendtoaddress
_cmd("sendtoaddress %s %d %s %s" % (bitcoinaddress, amount, comment, comment_to))
File "bitcoin.py", line 86, in _cmd
return _parse(_cmd_raw(args))[0]
File "bitcoin.py", line 92, in _cmd_raw
raise BitcoinError(errors)
bitcoin.BitcoinError: error: Insufficient funds
It should be pretty easy to produce something like this, instead:
>>> bitcoin.sendtoaddress("1Nsq3itZULUZjtZGcjNrtZtwT8aMsHu1R1", 1000000)
***ERROR: Insufficient funds***
Attempted Transaction: 1000000
Available Balance: 922100
Or whatever info/format-string you want, but those Traceback messages tend to scare users.