1 from util import print_error
6 print_error("Install zbar package to enable QR scans")
9 from urlparse import urlparse, parse_qs
17 proc = zbar.Processor()
25 # User closed the preview window
28 for r in proc.results:
29 if str(r.type) != 'QRCODE':
32 return parse_uri(r.data)
36 # It's just an address (not BIP21)
37 return {'address': uri}
40 # Workaround for urlparse, it don't handle bitcoin: URI properly
41 uri = uri.replace(':', '://')
44 result = {'address': uri.netloc}
46 if uri.path.startswith('?'):
47 params = parse_qs(uri.path[1:])
49 params = parse_qs(uri.path)
51 for k,v in params.items():
52 if k in ('amount', 'label', 'message'):
57 if __name__ == '__main__':
60 assert(parse_uri('1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
61 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
63 assert(parse_uri('bitcoin://1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
64 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
66 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
67 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
69 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN?amount=10') ==
70 {'amount': '10', 'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
72 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN?amount=10&label=slush&message=Small%20tip%20to%20slush') ==
73 {'amount': '10', 'label': 'slush', 'message': 'Small tip to slush', 'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})