Skip to content

Commit 48ed68b

Browse files
committed
feat(main): Adding a new method to more conveniently and quickly determine the rate of the desired quote
1 parent 8965477 commit 48ed68b

File tree

3 files changed

+168
-2
lines changed

3 files changed

+168
-2
lines changed

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This framework is published at the TestPyPI, install it with pip:
2424

2525
Get currencies
2626
```python
27-
>>> mng.get_currency()
27+
>>> mng.get_currencies()
2828
{
2929
"code": 200,
3030
"detail":
@@ -55,6 +55,20 @@ Get currencies
5555
}
5656
```
5757

58+
Get currency
59+
```python
60+
>>> mng.get_currency('USDUAH')
61+
{
62+
"code": 200,
63+
"detail": {
64+
"USDUAH": {
65+
"Buy": 37.5,
66+
"Sale": 37.8702
67+
}
68+
}
69+
}
70+
```
71+
5872
Get client info
5973
```python
6074
>>> mng.get_client_info()

monobank_api_client/config.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,113 @@
1616
MONOBANK_WEBHOOK_URI = os.getenv(
1717
"MONOBANK_WEBHOOK_URI", "https://api.monobank.ua/personal/webhook"
1818
)
19+
20+
MONOBANK_CURRENCIES = {
21+
"USDUAH": {"currencyCodeA": 840, "currencyCodeB": 980},
22+
"EURUAH": {"currencyCodeA": 978, "currencyCodeB": 980},
23+
"EURUSD": {"currencyCodeA": 978, "currencyCodeB": 840},
24+
"GBPUAH": {"currencyCodeA": 826, "currencyCodeB": 980},
25+
"JPYUAH": {"currencyCodeA": 392, "currencyCodeB": 980},
26+
"CHFUAH": {"currencyCodeA": 756, "currencyCodeB": 980},
27+
"CNYUAH": {"currencyCodeA": 156, "currencyCodeB": 980},
28+
"AEDUAH": {"currencyCodeA": 784, "currencyCodeB": 980},
29+
"AFNUAH": {"currencyCodeA": 971, "currencyCodeB": 980},
30+
"ALLUAH": {"currencyCodeA": 8, "currencyCodeB": 980},
31+
"AMDUAH": {"currencyCodeA": 51, "currencyCodeB": 980},
32+
"AOAUAH": {"currencyCodeA": 973, "currencyCodeB": 980},
33+
"ARSUAH": {"currencyCodeA": 32, "currencyCodeB": 980},
34+
"AUDUAH": {"currencyCodeA": 36, "currencyCodeB": 980},
35+
"AZNUAH": {"currencyCodeA": 944, "currencyCodeB": 980},
36+
"BDTUAH": {"currencyCodeA": 50, "currencyCodeB": 980},
37+
"BGNUAH": {"currencyCodeA": 975, "currencyCodeB": 980},
38+
"BHDUAH": {"currencyCodeA": 48, "currencyCodeB": 980},
39+
"BIFUAH": {"currencyCodeA": 108, "currencyCodeB": 980},
40+
"BNDUAH": {"currencyCodeA": 96, "currencyCodeB": 980},
41+
"BOBUAH": {"currencyCodeA": 68, "currencyCodeB": 980},
42+
"BRLUAH": {"currencyCodeA": 986, "currencyCodeB": 980},
43+
"BWPUAH": {"currencyCodeA": 72, "currencyCodeB": 980},
44+
"BYNUAH": {"currencyCodeA": 933, "currencyCodeB": 980},
45+
"CADUAH": {"currencyCodeA": 124, "currencyCodeB": 980},
46+
"CDFUAH": {"currencyCodeA": 976, "currencyCodeB": 980},
47+
"CLPUAH": {"currencyCodeA": 152, "currencyCodeB": 980},
48+
"COPUAH": {"currencyCodeA": 170, "currencyCodeB": 980},
49+
"CRCUAH": {"currencyCodeA": 188, "currencyCodeB": 980},
50+
"CUPUAH": {"currencyCodeA": 192, "currencyCodeB": 980},
51+
"CZKUAH": {"currencyCodeA": 203, "currencyCodeB": 980},
52+
"DJFUAH": {"currencyCodeA": 262, "currencyCodeB": 980},
53+
"DKKUAH": {"currencyCodeA": 208, "currencyCodeB": 980},
54+
"DZDUAH": {"currencyCodeA": 12, "currencyCodeB": 980},
55+
"EGPUAH": {"currencyCodeA": 818, "currencyCodeB": 980},
56+
"ETBUAH": {"currencyCodeA": 230, "currencyCodeB": 980},
57+
"GELUAH": {"currencyCodeA": 981, "currencyCodeB": 980},
58+
"GHSUAH": {"currencyCodeA": 936, "currencyCodeB": 980},
59+
"GMDUAH": {"currencyCodeA": 270, "currencyCodeB": 980},
60+
"GNFUAH": {"currencyCodeA": 324, "currencyCodeB": 980},
61+
"HKDUAH": {"currencyCodeA": 344, "currencyCodeB": 980},
62+
"HRKUAH": {"currencyCodeA": 191, "currencyCodeB": 980},
63+
"HUFUAH": {"currencyCodeA": 348, "currencyCodeB": 980},
64+
"IDRUAH": {"currencyCodeA": 360, "currencyCodeB": 980},
65+
"ILSUAH": {"currencyCodeA": 376, "currencyCodeB": 980},
66+
"INRUAH": {"currencyCodeA": 356, "currencyCodeB": 980},
67+
"IQDUAH": {"currencyCodeA": 368, "currencyCodeB": 980},
68+
"ISKUAH": {"currencyCodeA": 352, "currencyCodeB": 980},
69+
"JODUAH": {"currencyCodeA": 400, "currencyCodeB": 980},
70+
"KESUAH": {"currencyCodeA": 404, "currencyCodeB": 980},
71+
"KGSUAH": {"currencyCodeA": 417, "currencyCodeB": 980},
72+
"KHRUAH": {"currencyCodeA": 116, "currencyCodeB": 980},
73+
"KRWUAH": {"currencyCodeA": 410, "currencyCodeB": 980},
74+
"KWDUAH": {"currencyCodeA": 414, "currencyCodeB": 980},
75+
"KZTUAH": {"currencyCodeA": 398, "currencyCodeB": 980},
76+
"LAKUAH": {"currencyCodeA": 418, "currencyCodeB": 980},
77+
"LBPUAH": {"currencyCodeA": 422, "currencyCodeB": 980},
78+
"LKRUAH": {"currencyCodeA": 144, "currencyCodeB": 980},
79+
"LYDUAH": {"currencyCodeA": 434, "currencyCodeB": 980},
80+
"MADUAH": {"currencyCodeA": 504, "currencyCodeB": 980},
81+
"MDLUAH": {"currencyCodeA": 498, "currencyCodeB": 980},
82+
"MGAUAH": {"currencyCodeA": 969, "currencyCodeB": 980},
83+
"MKDUAH": {"currencyCodeA": 807, "currencyCodeB": 980},
84+
"MNTUAH": {"currencyCodeA": 496, "currencyCodeB": 980},
85+
"MURUAH": {"currencyCodeA": 480, "currencyCodeB": 980},
86+
"MWKUAH": {"currencyCodeA": 454, "currencyCodeB": 980},
87+
"MXNUAH": {"currencyCodeA": 484, "currencyCodeB": 980},
88+
"MYRUAH": {"currencyCodeA": 458, "currencyCodeB": 980},
89+
"MZNUAH": {"currencyCodeA": 943, "currencyCodeB": 980},
90+
"NADUAH": {"currencyCodeA": 516, "currencyCodeB": 980},
91+
"NGNUAH": {"currencyCodeA": 566, "currencyCodeB": 980},
92+
"NIOUAH": {"currencyCodeA": 558, "currencyCodeB": 980},
93+
"NOKUAH": {"currencyCodeA": 578, "currencyCodeB": 980},
94+
"NPRUAH": {"currencyCodeA": 524, "currencyCodeB": 980},
95+
"NZDUAH": {"currencyCodeA": 554, "currencyCodeB": 980},
96+
"OMRUAH": {"currencyCodeA": 512, "currencyCodeB": 980},
97+
"PENUAH": {"currencyCodeA": 604, "currencyCodeB": 980},
98+
"PHPUAH": {"currencyCodeA": 608, "currencyCodeB": 980},
99+
"PKRUAH": {"currencyCodeA": 586, "currencyCodeB": 980},
100+
"PLNUAH": {"currencyCodeA": 985, "currencyCodeB": 980},
101+
"PYGUAH": {"currencyCodeA": 600, "currencyCodeB": 980},
102+
"QARUAH": {"currencyCodeA": 634, "currencyCodeB": 980},
103+
"RONUAH": {"currencyCodeA": 946, "currencyCodeB": 980},
104+
"RSDUAH": {"currencyCodeA": 941, "currencyCodeB": 980},
105+
"SARUAH": {"currencyCodeA": 682, "currencyCodeB": 980},
106+
"SCRUAH": {"currencyCodeA": 690, "currencyCodeB": 980},
107+
"SDGUAH": {"currencyCodeA": 938, "currencyCodeB": 980},
108+
"SEKUAH": {"currencyCodeA": 752, "currencyCodeB": 980},
109+
"SGDUAH": {"currencyCodeA": 702, "currencyCodeB": 980},
110+
"SLLUAH": {"currencyCodeA": 694, "currencyCodeB": 980},
111+
"SOSUAH": {"currencyCodeA": 706, "currencyCodeB": 980},
112+
"SRDUAH": {"currencyCodeA": 968, "currencyCodeB": 980},
113+
"SZLUAH": {"currencyCodeA": 748, "currencyCodeB": 980},
114+
"THBUAH": {"currencyCodeA": 764, "currencyCodeB": 980},
115+
"TJSUAH": {"currencyCodeA": 972, "currencyCodeB": 980},
116+
"TNDUAH": {"currencyCodeA": 788, "currencyCodeB": 980},
117+
"TRYUAH": {"currencyCodeA": 949, "currencyCodeB": 980},
118+
"TWDUAH": {"currencyCodeA": 901, "currencyCodeB": 980},
119+
"TZSUAH": {"currencyCodeA": 834, "currencyCodeB": 980},
120+
"UGXUAH": {"currencyCodeA": 800, "currencyCodeB": 980},
121+
"UYUUAH": {"currencyCodeA": 858, "currencyCodeB": 980},
122+
"UZSUAH": {"currencyCodeA": 860, "currencyCodeB": 980},
123+
"VNDUAH": {"currencyCodeA": 704, "currencyCodeB": 980},
124+
"XAFUAH": {"currencyCodeA": 950, "currencyCodeB": 980},
125+
"XOFUAH": {"currencyCodeA": 952, "currencyCodeB": 980},
126+
"YERUAH": {"currencyCodeA": 886, "currencyCodeB": 980},
127+
"ZARUAH": {"currencyCodeA": 710, "currencyCodeB": 980},
128+
}

monobank_api_client/managers.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
MONOBANK_CURRENCY_URI,
88
MONOBANK_STATEMENT_URI,
99
MONOBANK_WEBHOOK_URI,
10+
MONOBANK_CURRENCIES,
1011
)
1112

1213

@@ -18,6 +19,7 @@ def __init__(self, token=None):
1819
_mono_client_info_uri = MONOBANK_CLIENT_INFO_URI
1920
_mono_statement_uri = MONOBANK_STATEMENT_URI
2021
_mono_webhook_uri = MONOBANK_WEBHOOK_URI
22+
_mono_currencies = MONOBANK_CURRENCIES
2123

2224
@property
2325
def token(self) -> str:
@@ -59,6 +61,10 @@ def mono_webhook_uri(self) -> str:
5961
def mono_webhook_uri(self, new_uri):
6062
self._mono_webhook_uri = new_uri
6163

64+
@property
65+
def mono_currencies(self) -> Dict:
66+
return self._mono_currencies
67+
6268
@classmethod
6369
def session(cls) -> requests.sessions.Session:
6470
return requests.Session()
@@ -74,7 +80,7 @@ def __date(period: int) -> Dict:
7480
exception = {"detail": str(exc)}
7581
return exception
7682

77-
def get_currency(self) -> Dict:
83+
def get_currencies(self) -> Dict:
7884
try:
7985
session = self.session()
8086
uri = self.mono_currency_uri
@@ -90,6 +96,42 @@ def get_currency(self) -> Dict:
9096
exception = {"detail": str(exc)}
9197
return exception
9298

99+
def get_currency(self, ccy_pair: str) -> Dict:
100+
try:
101+
pair = self.mono_currencies.get(ccy_pair)
102+
currencies = self.get_currencies()
103+
code = currencies.get("code")
104+
payload = currencies.get("detail")
105+
if isinstance(payload, list):
106+
for ccy in payload:
107+
if ccy.get("currencyCodeB") == pair.get("currencyCodeB"):
108+
for key, value in ccy.items():
109+
if key == "currencyCodeA" and value == pair.get(
110+
"currencyCodeA"
111+
):
112+
buy = ccy.get("rateBuy")
113+
sale = ccy.get("rateSell")
114+
if buy is not None and sale is not None:
115+
currency = {ccy_pair: {"Buy": buy, "Sale": sale}}
116+
else:
117+
cross = ccy.get("rateCross")
118+
currency = {ccy_pair: {"Cross": cross}}
119+
response = {"code": code, "detail": currency}
120+
return response
121+
else:
122+
response = {"code": code, "detail": payload}
123+
return response
124+
except AttributeError:
125+
error_response = {
126+
"code": 400,
127+
"detail": "Please enter a valid query",
128+
"list of acceptable currency pairs": self.mono_currencies.keys(),
129+
}
130+
return error_response
131+
except Exception as exc:
132+
exception = {"detail": str(exc)}
133+
return exception
134+
93135
def get_client_info(self) -> Dict:
94136
try:
95137
session = self.session()

0 commit comments

Comments
 (0)