import platform
import shutil
from datetime import datetime
-is_verbose = True
+is_verbose = False
class MyEncoder(json.JSONEncoder):
def default(self, obj):
from transaction import Transaction
- if isinstance(obj, Transaction):
+ if isinstance(obj, Transaction):
return obj.as_dict()
return super(MyEncoder, self).default(obj)
global is_verbose
is_verbose = b
+
def print_error(*args):
if not is_verbose: return
+ print_stderr(*args)
+
+def print_stderr(*args):
args = [str(item) for item in args]
sys.stderr.write(" ".join(args) + "\n")
sys.stderr.flush()
s = repr(obj)
sys.stdout.write(s + "\n")
sys.stdout.flush()
-
def user_dir():
if "HOME" in os.environ:
return "/sdcard/electrum/"
else:
#raise Exception("No home directory found in environment variables.")
- return
+ return
def appdata_dir():
"""Find the path to the application data directory; add an electrum folder and return path."""
elif (platform.system() == "Darwin" or
platform.system() == "DragonFly" or
platform.system() == "OpenBSD" or
+ platform.system() == "FreeBSD" or
platform.system() == "NetBSD"):
return "/Library/Application Support/Electrum"
else:
digits.insert(0,'0')
digits.insert(-decimal_point,'.')
s = ''.join(digits).rstrip('0')
- if sign:
+ if sign:
s = '-' + s
elif is_diff:
s = "+" + s
s += "0"*( 1 + num_zeros - ( len(s) - p ))
if whitespaces:
s += " "*( 1 + decimal_point - ( len(s) - p ))
- s = " "*( 13 - decimal_point - ( p )) + s
+ s = " "*( 13 - decimal_point - ( p )) + s
return s
return "over %d years ago" % (round(distance_in_minutes / 525600))
-
-
# URL decode
-_ud = re.compile('%([0-9a-hA-H]{2})', re.MULTILINE)
-urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
+#_ud = re.compile('%([0-9a-hA-H]{2})', re.MULTILINE)
+#urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
-def parse_url(url):
+def parse_URI(uri):
+ import urlparse
+ import bitcoin
from decimal import Decimal
- url = str(url)
- o = url[8:].split('?')
- address = o[0]
- if len(o)>1:
- params = o[1].split('&')
- else:
- params = []
-
- amount = label = message = signature = identity = ''
- for p in params:
- k,v = p.split('=')
- uv = urldecode(v)
- if k == 'amount':
- amount = uv
- m = re.match('([0-9\.]+)X([0-9])', uv)
- if m:
- k = int(m.group(2)) - 8
- amount = Decimal(m.group(1)) * pow( Decimal(10) , k)
- else:
- amount = Decimal(uv)
- elif k == 'message':
- message = uv
- elif k == 'label':
- label = uv
- elif k == 'signature':
- identity, signature = uv.split(':')
- url = url.replace('&%s=%s'%(k,v),'')
- else:
- print k,v
-
- return address, amount, label, message, signature, identity, url
+
+ if ':' not in uri:
+ assert bitcoin.is_address(uri)
+ return uri, None, None, None, None
+
+ u = urlparse.urlparse(uri)
+ assert u.scheme == 'bitcoin'
+
+ address = u.path
+ valid_address = bitcoin.is_address(address)
+
+ pq = urlparse.parse_qs(u.query)
+
+ for k, v in pq.items():
+ if len(v)!=1:
+ raise Exception('Duplicate Key', k)
+
+ amount = label = message = request_url = ''
+ if 'amount' in pq:
+ am = pq['amount'][0]
+ m = re.match('([0-9\.]+)X([0-9])', am)
+ if m:
+ k = int(m.group(2)) - 8
+ amount = Decimal(m.group(1)) * pow( Decimal(10) , k)
+ else:
+ amount = Decimal(am) * 100000000
+ if 'message' in pq:
+ message = pq['message'][0]
+ if 'label' in pq:
+ label = pq['label'][0]
+ if 'r' in pq:
+ request_url = pq['r'][0]
+
+ if request_url != '':
+ return address, amount, label, message, request_url
+
+ assert valid_address
+
+ return address, amount, label, message, request_url
# Python bug (http://bugs.python.org/issue1927) causes raw_input