/[james]/currency/!Currency/py/Rates.py
ViewVC logotype

Annotation of /currency/!Currency/py/Rates.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12 - (hide annotations) (download) (as text)
Mon Feb 10 18:25:55 2003 UTC (21 years, 9 months ago) by james
File MIME type: text/x-python
File size: 1645 byte(s)
Initial import.

1 james 12 # > !Currency.py.Rates/py
2    
3     import pickle
4     import re
5     import string
6     import urllib
7    
8    
9     _re_date = re.compile(r"EFFECTIVE *(\d\d-\w\w\w-\d\d)")
10     _re_rate = re.compile(r"([A-Z]{3,3}) ([^0-9]+?) +([0-9.]+)? +([0-9.]+)( +)?([^0-9]*)$")
11    
12    
13     def load(cache):
14     global _date, _rates
15     c = open(cache, 'r')
16     _date = pickle.load(c)
17     _rates = pickle.load(c)
18     c.close()
19    
20    
21     def update(url, cache, us, dollar):
22     global _date, _rates
23     rates = [(us, dollar, 1.0)]
24     u = urllib.urlopen(url)
25     c = open(cache, 'w')
26     while 1:
27     l = u.readline()
28     m = _re_date.match(l)
29     if m:
30     break
31     _date = m.group(1)
32     while 1:
33     l = u.readline()
34     if l[:4] == 'CODE':
35     break
36     l = u.readline()
37     while 1:
38     l = u.readline()
39     m = _re_rate.match(l[:-2])
40     if m is None:
41     break
42     rates.append((string.capwords(string.lower(m.group(2))),
43     string.capwords(string.lower(m.group(6))),
44     eval(m.group(4))))
45     u.close()
46     pickle.dump(_date, c, 1)
47     _rates = rates
48     pickle.dump(_rates, c, 1)
49     c.close()
50    
51    
52     def currencies(format):
53     return map(lambda rate, format = format:
54     format % {'country': rate[0], 'currency': rate[1], 'rate': rate[2]},
55     _rates)
56    
57    
58     def currency(format, i):
59     return format % {'country': _rates[i][0], 'currency': _rates[i][1], 'rate': _rates[i][2]}
60    
61    
62     def date():
63     return _date
64    
65    
66     def convert(currency, value):
67     conversion = []
68     base = float(value) / _rates[currency][2]
69     for rate in _rates:
70     conversion.append(base * rate[2])
71     return conversion

  ViewVC Help
Powered by ViewVC 1.1.26