Skip to content

Commit 33b7683

Browse files
author
Ravi kumar
committed
Merge pull request #12 from ravigadila/symbol
#11 currency symbol
2 parents 5444008 + c0338a0 commit 33b7683

7 files changed

Lines changed: 254 additions & 7 deletions

File tree

MANIFEST.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
include README.md
22
include LICENSE.txt
3+
include forex_python/raw_data/currencies.json

README.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ forex-python
22
============
33
[![Build Status](https://travis-ci.org/MicroPyramid/forex-python.svg?branch=master)](https://travis-ci.org/MicroPyramid/forex-python)
44
[![Coverage Status](https://coveralls.io/repos/github/MicroPyramid/forex-python/badge.svg?branch=master)](https://coveralls.io/github/MicroPyramid/forex-python?branch=master)
5+
[![Python Support](https://img.shields.io/badge/python-2.7%2C%203.3%2C%203.4%2C%203.5-blue.svg)](https://pypi.python.org/pypi/forex-python)
56
[![Code Health](https://landscape.io/github/MicroPyramid/forex-python/master/landscape.svg?style=plastic)](https://landscape.io/github/MicroPyramid/forex-python/master)
67

78
Free Foreign exchange rates and currency conversion.
@@ -68,12 +69,19 @@ Convert amount from USD to INR based on 2010-03-01 rates
6869

6970
RatesNotAvailableError for invalid currency codes and missing currency code from source:
7071
```python
71-
>>> c.get_rate('XYZ', 'INR')
72-
Traceback (most recent call last):
73-
RatesNotAvailableError: Currency XYZ => INR rate not available for Date latest.
72+
>>> c.get_rate('XYZ', 'INR')
73+
Traceback (most recent call last):
74+
RatesNotAvailableError: Currency XYZ => INR rate not available for Date latest.
7475
```
7576

76-
Compleate [Documentation](http://forex-python.readthedocs.org/en/latest/?badge=latest)
77+
Get currency symbol using currency code
78+
```python
79+
>>> from forex_python.converter import CurrencyCodes
80+
>>> c = CurrencyCodes()
81+
>>> print c.get_symbol('GBP')
82+
£
83+
```
7784

78-
We welcome your feedback and support. found bug raise github issue.
85+
Complete [Documentation](http://forex-python.readthedocs.org/en/latest/?badge=latest)
7986

87+
We welcome your feedback and support. found bug raise github issue.

docs/source/usage.rst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Usage Examples:
22
===============
33

4+
Currency Rates
5+
--------------
46
1. list all latest currency rates for "USD"::
57
>>> from forex_python.converter import CurrencyRates
68
>>> c = CurrencyRates()
@@ -32,3 +34,24 @@ Usage Examples:
3234
datetime.datetime(2014, 5, 23, 18, 36, 28, 151012)
3335
>>> c.convert('USD', 'INR', 10, date_obj)
3436
585.09
37+
38+
Currency Symboles & Codes
39+
-------------------------
40+
1. Get Currency symbol Using currency code::
41+
>>> from forex_python.converter import CurrencyCodes
42+
>>> c = CurrencyCodes()
43+
>>> c.get_symbol('GBP')
44+
u'\xa3'
45+
>>> print c.get_symbol('GBP')
46+
£
47+
>>> print c.get_symbol('EUR')
48+
49+
50+
2. Get Currency Name using currency code::
51+
>>> c.get_currency_name('EUR')
52+
u'European Euro'
53+
>>> c.get_currency_name('INR')
54+
u'Indian rupee'
55+
56+
57+

forex_python/converter.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import os
2+
import json
13
import requests
24

35

@@ -61,3 +63,28 @@ def convert(self, base_cur, dest_cur, amount, date_obj=None):
6163
converted_amount = rate * amount
6264
return converted_amount
6365
raise RatesNotAvailableError("Currency Rates Source Not Ready")
66+
67+
68+
class CurrencyCodes:
69+
70+
def __init__(self):
71+
pass
72+
73+
def _get_data(self, currency_code):
74+
file_path = os.path.dirname(os.path.abspath(__file__))
75+
with open(file_path+'/raw_data/currencies.json') as f:
76+
currency_data = json.loads(f.read())
77+
currency_dict = next((item for item in currency_data if item["cc"] == currency_code), None)
78+
return currency_dict
79+
80+
def get_symbol(self, currency_code):
81+
currency_dict = self._get_data(currency_code)
82+
if currency_dict:
83+
return currency_dict.get('symbol')
84+
return None
85+
86+
def get_currency_name(self, currency_code):
87+
currency_dict = self._get_data(currency_code)
88+
if currency_dict:
89+
return currency_dict.get('name')
90+
return None
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
[
2+
{"cc":"AED","symbol":"\u062f.\u0625;","name":"UAE dirham"},
3+
{"cc":"AFN","symbol":"Afs","name":"Afghan afghani"},
4+
{"cc":"ALL","symbol":"L","name":"Albanian lek"},
5+
{"cc":"AMD","symbol":"AMD","name":"Armenian dram"},
6+
{"cc":"ANG","symbol":"NA\u0192","name":"Netherlands Antillean gulden"},
7+
{"cc":"AOA","symbol":"Kz","name":"Angolan kwanza"},
8+
{"cc":"ARS","symbol":"$","name":"Argentine peso"},
9+
{"cc":"AUD","symbol":"$","name":"Australian dollar"},
10+
{"cc":"AWG","symbol":"\u0192","name":"Aruban florin"},
11+
{"cc":"AZN","symbol":"AZN","name":"Azerbaijani manat"},
12+
{"cc":"BAM","symbol":"KM","name":"Bosnia and Herzegovina konvertibilna marka"},
13+
{"cc":"BBD","symbol":"Bds$","name":"Barbadian dollar"},
14+
{"cc":"BDT","symbol":"\u09f3","name":"Bangladeshi taka"},
15+
{"cc":"BGN","symbol":"BGN","name":"Bulgarian lev"},
16+
{"cc":"BHD","symbol":".\u062f.\u0628","name":"Bahraini dinar"},
17+
{"cc":"BIF","symbol":"FBu","name":"Burundi franc"},
18+
{"cc":"BMD","symbol":"BD$","name":"Bermudian dollar"},
19+
{"cc":"BND","symbol":"B$","name":"Brunei dollar"},
20+
{"cc":"BOB","symbol":"Bs.","name":"Bolivian boliviano"},
21+
{"cc":"BRL","symbol":"R$","name":"Brazilian real"},
22+
{"cc":"BSD","symbol":"B$","name":"Bahamian dollar"},
23+
{"cc":"BTN","symbol":"Nu.","name":"Bhutanese ngultrum"},
24+
{"cc":"BWP","symbol":"P","name":"Botswana pula"},
25+
{"cc":"BYR","symbol":"Br","name":"Belarusian ruble"},
26+
{"cc":"BZD","symbol":"BZ$","name":"Belize dollar"},
27+
{"cc":"CAD","symbol":"$","name":"Canadian dollar"},
28+
{"cc":"CDF","symbol":"F","name":"Congolese franc"},
29+
{"cc":"CHF","symbol":"Fr.","name":"Swiss franc"},
30+
{"cc":"CLP","symbol":"$","name":"Chilean peso"},
31+
{"cc":"CNY","symbol":"\u00a5","name":"Chinese/Yuan renminbi"},
32+
{"cc":"COP","symbol":"Col$","name":"Colombian peso"},
33+
{"cc":"CRC","symbol":"\u20a1","name":"Costa Rican colon"},
34+
{"cc":"CUC","symbol":"$","name":"Cuban peso"},
35+
{"cc":"CVE","symbol":"Esc","name":"Cape Verdean escudo"},
36+
{"cc":"CZK","symbol":"K\u010d","name":"Czech koruna"},
37+
{"cc":"DJF","symbol":"Fdj","name":"Djiboutian franc"},
38+
{"cc":"DKK","symbol":"Kr","name":"Danish krone"},
39+
{"cc":"DOP","symbol":"RD$","name":"Dominican peso"},
40+
{"cc":"DZD","symbol":"\u062f.\u062c","name":"Algerian dinar"},
41+
{"cc":"EEK","symbol":"KR","name":"Estonian kroon"},
42+
{"cc":"EGP","symbol":"\u00a3","name":"Egyptian pound"},
43+
{"cc":"ERN","symbol":"Nfa","name":"Eritrean nakfa"},
44+
{"cc":"ETB","symbol":"Br","name":"Ethiopian birr"},
45+
{"cc":"EUR","symbol":"\u20ac","name":"European Euro"},
46+
{"cc":"FJD","symbol":"FJ$","name":"Fijian dollar"},
47+
{"cc":"FKP","symbol":"\u00a3","name":"Falkland Islands pound"},
48+
{"cc":"GBP","symbol":"\u00a3","name":"British pound"},
49+
{"cc":"GEL","symbol":"GEL","name":"Georgian lari"},
50+
{"cc":"GHS","symbol":"GH\u20b5","name":"Ghanaian cedi"},
51+
{"cc":"GIP","symbol":"\u00a3","name":"Gibraltar pound"},
52+
{"cc":"GMD","symbol":"D","name":"Gambian dalasi"},
53+
{"cc":"GNF","symbol":"FG","name":"Guinean franc"},
54+
{"cc":"GQE","symbol":"CFA","name":"Central African CFA franc"},
55+
{"cc":"GTQ","symbol":"Q","name":"Guatemalan quetzal"},
56+
{"cc":"GYD","symbol":"GY$","name":"Guyanese dollar"},
57+
{"cc":"HKD","symbol":"HK$","name":"Hong Kong dollar"},
58+
{"cc":"HNL","symbol":"L","name":"Honduran lempira"},
59+
{"cc":"HRK","symbol":"kn","name":"Croatian kuna"},
60+
{"cc":"HTG","symbol":"G","name":"Haitian gourde"},
61+
{"cc":"HUF","symbol":"Ft","name":"Hungarian forint"},
62+
{"cc":"IDR","symbol":"Rp","name":"Indonesian rupiah"},
63+
{"cc":"ILS","symbol":"\u20aa","name":"Israeli new sheqel"},
64+
{"cc":"INR","symbol":"\u20B9","name":"Indian rupee"},
65+
{"cc":"IQD","symbol":"\u062f.\u0639","name":"Iraqi dinar"},
66+
{"cc":"IRR","symbol":"IRR","name":"Iranian rial"},
67+
{"cc":"ISK","symbol":"kr","name":"Icelandic kr\u00f3na"},
68+
{"cc":"JMD","symbol":"J$","name":"Jamaican dollar"},
69+
{"cc":"JOD","symbol":"JOD","name":"Jordanian dinar"},
70+
{"cc":"JPY","symbol":"\u00a5","name":"Japanese yen"},
71+
{"cc":"KES","symbol":"KSh","name":"Kenyan shilling"},
72+
{"cc":"KGS","symbol":"\u0441\u043e\u043c","name":"Kyrgyzstani som"},
73+
{"cc":"KHR","symbol":"\u17db","name":"Cambodian riel"},
74+
{"cc":"KMF","symbol":"KMF","name":"Comorian franc"},
75+
{"cc":"KPW","symbol":"W","name":"North Korean won"},
76+
{"cc":"KRW","symbol":"W","name":"South Korean won"},
77+
{"cc":"KWD","symbol":"KWD","name":"Kuwaiti dinar"},
78+
{"cc":"KYD","symbol":"KY$","name":"Cayman Islands dollar"},
79+
{"cc":"KZT","symbol":"T","name":"Kazakhstani tenge"},
80+
{"cc":"LAK","symbol":"KN","name":"Lao kip"},
81+
{"cc":"LBP","symbol":"\u00a3","name":"Lebanese lira"},
82+
{"cc":"LKR","symbol":"Rs","name":"Sri Lankan rupee"},
83+
{"cc":"LRD","symbol":"L$","name":"Liberian dollar"},
84+
{"cc":"LSL","symbol":"M","name":"Lesotho loti"},
85+
{"cc":"LTL","symbol":"Lt","name":"Lithuanian litas"},
86+
{"cc":"LVL","symbol":"Ls","name":"Latvian lats"},
87+
{"cc":"LYD","symbol":"LD","name":"Libyan dinar"},
88+
{"cc":"MAD","symbol":"MAD","name":"Moroccan dirham"},
89+
{"cc":"MDL","symbol":"MDL","name":"Moldovan leu"},
90+
{"cc":"MGA","symbol":"FMG","name":"Malagasy ariary"},
91+
{"cc":"MKD","symbol":"MKD","name":"Macedonian denar"},
92+
{"cc":"MMK","symbol":"K","name":"Myanma kyat"},
93+
{"cc":"MNT","symbol":"\u20ae","name":"Mongolian tugrik"},
94+
{"cc":"MOP","symbol":"P","name":"Macanese pataca"},
95+
{"cc":"MRO","symbol":"UM","name":"Mauritanian ouguiya"},
96+
{"cc":"MUR","symbol":"Rs","name":"Mauritian rupee"},
97+
{"cc":"MVR","symbol":"Rf","name":"Maldivian rufiyaa"},
98+
{"cc":"MWK","symbol":"MK","name":"Malawian kwacha"},
99+
{"cc":"MXN","symbol":"$","name":"Mexican peso"},
100+
{"cc":"MYR","symbol":"RM","name":"Malaysian ringgit"},
101+
{"cc":"MZM","symbol":"MTn","name":"Mozambican metical"},
102+
{"cc":"NAD","symbol":"N$","name":"Namibian dollar"},
103+
{"cc":"NGN","symbol":"\u20a6","name":"Nigerian naira"},
104+
{"cc":"NIO","symbol":"C$","name":"Nicaraguan c\u00f3rdoba"},
105+
{"cc":"NOK","symbol":"kr","name":"Norwegian krone"},
106+
{"cc":"NPR","symbol":"NRs","name":"Nepalese rupee"},
107+
{"cc":"NZD","symbol":"NZ$","name":"New Zealand dollar"},
108+
{"cc":"OMR","symbol":"OMR","name":"Omani rial"},
109+
{"cc":"PAB","symbol":"B./","name":"Panamanian balboa"},
110+
{"cc":"PEN","symbol":"S/.","name":"Peruvian nuevo sol"},
111+
{"cc":"PGK","symbol":"K","name":"Papua New Guinean kina"},
112+
{"cc":"PHP","symbol":"\u20b1","name":"Philippine peso"},
113+
{"cc":"PKR","symbol":"Rs.","name":"Pakistani rupee"},
114+
{"cc":"PLN","symbol":"z\u0142","name":"Polish zloty"},
115+
{"cc":"PYG","symbol":"\u20b2","name":"Paraguayan guarani"},
116+
{"cc":"QAR","symbol":"QR","name":"Qatari riyal"},
117+
{"cc":"RON","symbol":"L","name":"Romanian leu"},
118+
{"cc":"RSD","symbol":"din.","name":"Serbian dinar"},
119+
{"cc":"RUB","symbol":"R","name":"Russian ruble"},
120+
{"cc":"SAR","symbol":"SR","name":"Saudi riyal"},
121+
{"cc":"SBD","symbol":"SI$","name":"Solomon Islands dollar"},
122+
{"cc":"SCR","symbol":"SR","name":"Seychellois rupee"},
123+
{"cc":"SDG","symbol":"SDG","name":"Sudanese pound"},
124+
{"cc":"SEK","symbol":"kr","name":"Swedish krona"},
125+
{"cc":"SGD","symbol":"S$","name":"Singapore dollar"},
126+
{"cc":"SHP","symbol":"\u00a3","name":"Saint Helena pound"},
127+
{"cc":"SLL","symbol":"Le","name":"Sierra Leonean leone"},
128+
{"cc":"SOS","symbol":"Sh.","name":"Somali shilling"},
129+
{"cc":"SRD","symbol":"$","name":"Surinamese dollar"},
130+
{"cc":"SYP","symbol":"LS","name":"Syrian pound"},
131+
{"cc":"SZL","symbol":"E","name":"Swazi lilangeni"},
132+
{"cc":"THB","symbol":"\u0e3f","name":"Thai baht"},
133+
{"cc":"TJS","symbol":"TJS","name":"Tajikistani somoni"},
134+
{"cc":"TMT","symbol":"m","name":"Turkmen manat"},
135+
{"cc":"TND","symbol":"DT","name":"Tunisian dinar"},
136+
{"cc":"TRY","symbol":"TRY","name":"Turkish new lira"},
137+
{"cc":"TTD","symbol":"TT$","name":"Trinidad and Tobago dollar"},
138+
{"cc":"TWD","symbol":"NT$","name":"New Taiwan dollar"},
139+
{"cc":"TZS","symbol":"TZS","name":"Tanzanian shilling"},
140+
{"cc":"UAH","symbol":"UAH","name":"Ukrainian hryvnia"},
141+
{"cc":"UGX","symbol":"USh","name":"Ugandan shilling"},
142+
{"cc":"USD","symbol":"US$","name":"United States dollar"},
143+
{"cc":"UYU","symbol":"$U","name":"Uruguayan peso"},
144+
{"cc":"UZS","symbol":"UZS","name":"Uzbekistani som"},
145+
{"cc":"VEB","symbol":"Bs","name":"Venezuelan bolivar"},
146+
{"cc":"VND","symbol":"\u20ab","name":"Vietnamese dong"},
147+
{"cc":"VUV","symbol":"VT","name":"Vanuatu vatu"},
148+
{"cc":"WST","symbol":"WS$","name":"Samoan tala"},
149+
{"cc":"XAF","symbol":"CFA","name":"Central African CFA franc"},
150+
{"cc":"XCD","symbol":"EC$","name":"East Caribbean dollar"},
151+
{"cc":"XDR","symbol":"SDR","name":"Special Drawing Rights"},
152+
{"cc":"XOF","symbol":"CFA","name":"West African CFA franc"},
153+
{"cc":"XPF","symbol":"F","name":"CFP franc"},
154+
{"cc":"YER","symbol":"YER","name":"Yemeni rial"},
155+
{"cc":"ZAR","symbol":"R","name":"South African rand"},
156+
{"cc":"ZMK","symbol":"ZK","name":"Zambian kwacha"},
157+
{"cc":"ZWR","symbol":"Z$","name":"Zimbabwean dollar"}
158+
]

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
import io
12
import os
23
from setuptools import setup, find_packages
34

45
VERSION = '0.2.2'
56

6-
with open(os.path.join(os.path.dirname(__file__), 'README.md')) as readme:
7+
with io.open(os.path.join(os.path.dirname(__file__), 'README.md'), encoding='utf-8', errors='ignore') as readme:
78
LONG_DESCRIPTION = readme.read()
89

910

tests/test.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import datetime
22
from unittest import TestCase
3-
from forex_python.converter import CurrencyRates
3+
from forex_python.converter import CurrencyRates, CurrencyCodes
44
from forex_python.converter import RatesNotAvailableError
55

66

@@ -88,3 +88,32 @@ def test_amount_convert_date(self):
8888
def test_amount_convert_invalid_currency(self):
8989
# test if amount returned in float
9090
self.assertRaises(RatesNotAvailableError, self.c.convert, 'ABC', 'XYZ', 10)
91+
92+
93+
class TestCurrencySymbol(TestCase):
94+
"""
95+
test currency symbols from currency codes
96+
"""
97+
def setUp(self):
98+
self.c = CurrencyCodes()
99+
100+
def test_with_valid_currency_code(self):
101+
self.assertEqual(str(self.c.get_symbol('USD')), 'US$')
102+
103+
def test_with_invalid_currency_code(self):
104+
self.assertFalse(self.c.get_symbol('XYZ'))
105+
106+
107+
class TestCurrencyName(TestCase):
108+
"""
109+
test currency name from currency codes
110+
"""
111+
def setUp(self):
112+
self.c = CurrencyCodes()
113+
114+
def test_with_valid_currency_code(self):
115+
self.assertEqual(str(self.c.get_currency_name('USD')), 'United States dollar')
116+
117+
def test_with_invalid_currency_code(self):
118+
self.assertFalse(self.c.get_currency_name('XYZ'))
119+

0 commit comments

Comments
 (0)