Skip to content

Commit e7c2fe7

Browse files
committed
Add base url as parameter
1 parent 066756f commit e7c2fe7

File tree

5 files changed

+101
-39
lines changed

5 files changed

+101
-39
lines changed

finterion/configuration/constants.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

finterion/configuration/urls.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
def get_retrieve_order_url(base_url, order_id):
2+
return f"{base_url}/orders/{order_id}"
3+
4+
5+
def get_list_orders_url(base_url):
6+
return f"{base_url}/orders"
7+
8+
9+
def create_order_url(base_url):
10+
return f"{base_url}/orders"
11+
12+
13+
def get_ping_url(base_url):
14+
return f"{base_url}/status/ping"
15+
16+
17+
def get_algorithm_url(base_url):
18+
return base_url
19+
20+
21+
def get_list_positions_url(base_url):
22+
return f"{base_url}/positions"
23+
24+
25+
def get_retrieve_position_url(base_url, position_id):
26+
return f"{base_url}/positions/{position_id}"
27+
28+
29+
def get_retrieve_portfolio_url(base_url):
30+
return f"{base_url}/portfolio"
31+

finterion/finterion.py

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,28 @@
33

44
class Finterion:
55

6-
def __init__(self, api_key):
6+
def __init__(self, api_key, base_url="https://api.finterion.com/algs"):
77
self.api_key = api_key
8+
self.base_url = base_url
89
self.ping()
910
self.algorithm = self.get_algorithm_model()
1011

1112
def ping(self):
12-
return services.ping(self.api_key)
13+
return services.ping(self.api_key, base_url=self.base_url)
1314

1415
def get_algorithm_model(self):
15-
return services.get_algorithm_model(self.api_key)
16-
17-
def get_orders(self, status=None, target_symbol=None, symbol=None, order_type=None, order_side=None):
16+
return services.get_algorithm_model(
17+
self.api_key, base_url=self.base_url
18+
)
19+
20+
def get_orders(
21+
self,
22+
status=None,
23+
target_symbol=None,
24+
symbol=None,
25+
order_type=None,
26+
order_side=None
27+
):
1828
query_params = {"itemized": "true"}
1929

2030
if status is not None:
@@ -32,21 +42,29 @@ def get_orders(self, status=None, target_symbol=None, symbol=None, order_type=No
3242
if order_side is not None:
3343
query_params["side"] = order_side
3444

35-
orders = services.get_orders(self.api_key, query_params)
45+
orders = services.get_orders(
46+
self.api_key, query_params, base_url=self.base_url
47+
)
3648
return orders["items"]
3749

3850
def get_order(self, order_id):
39-
return services.get_order(self.api_key, order_id)
51+
return services.get_order(
52+
self.api_key, order_id, base_url=self.base_url
53+
)
4054

41-
def create_order(self, target_symbol, order_side, order_type, amount, price):
55+
def create_order(
56+
self, target_symbol, order_side, order_type, amount, price
57+
):
4258
data = {
4359
"target_symbol": target_symbol,
4460
"side": order_side,
4561
"type": order_type,
4662
"amount": amount,
4763
"price": price
4864
}
49-
return services.create_order(self.api_key, data)
65+
return services.create_order(
66+
self.api_key, data, base_url=self.base_url
67+
)
5068

5169
def create_limit_order(self, target_symbol, order_side, amount, price):
5270
data = {
@@ -56,7 +74,9 @@ def create_limit_order(self, target_symbol, order_side, amount, price):
5674
"amount": amount,
5775
"price": price
5876
}
59-
return services.create_order(self.api_key, data)
77+
return services.create_order(
78+
self.api_key, data, base_url=self.base_url
79+
)
6080

6181
def create_market_order(self, target_symbol, order_side, amount):
6282

@@ -71,19 +91,27 @@ def create_market_order(self, target_symbol, order_side, amount):
7191
"type": "MARKET",
7292
"amount": amount,
7393
}
74-
return services.create_order(self.api_key, data)
94+
return services.create_order(
95+
self.api_key, data, base_url=self.base_url
96+
)
7597

7698
def get_position(self, position_id):
77-
return services.get_position(self.api_key, position_id)
99+
return services.get_position(
100+
self.api_key, position_id, base_url=self.base_url
101+
)
78102

79103
def get_positions(self, symbol=None):
80104
query_params = {"itemized": "true"}
81105

82106
if symbol is not None:
83107
query_params["symbol"] = symbol
84108

85-
positions = services.get_positions(self.api_key, query_params)
109+
positions = services.get_positions(
110+
self.api_key, query_params, base_url=self.base_url
111+
)
86112
return positions["items"]
87113

88114
def get_portfolio(self):
89-
return services.get_portfolio(self.api_key)
115+
return services.get_portfolio(
116+
self.api_key, self.base_url
117+
)

finterion/services.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import json
2+
import logging
23

34
import requests
4-
import logging
5-
from finterion.configuration import constants
5+
6+
from finterion.configuration.urls import get_retrieve_order_url, \
7+
get_ping_url, get_algorithm_url, get_retrieve_portfolio_url, \
8+
get_retrieve_position_url, get_list_positions_url, get_list_orders_url, \
9+
create_order_url
610
from finterion.exceptions import ClientException
711

812
logger = logging.getLogger(__name__)
@@ -17,62 +21,71 @@ def handle_response(response):
1721
if response.status_code == 401:
1822
raise ClientException("Unauthorized, check your API key")
1923
elif response.status_code == 400:
20-
2124
data = response.json()
25+
logger.error(data)
2226

2327
if "message" in data:
2428
raise ClientException(data["message"])
2529

30+
if "error" in data:
31+
raise ClientException(data["error"])
32+
2633
raise ClientException("Something went wrong")
2734
else:
2835
raise ClientException("Error connecting to finterion platform")
2936

3037

31-
def ping(api_key, url=constants.PING_ENDPOINT):
38+
def ping(api_key, base_url):
39+
url = get_ping_url(base_url)
3240
response = requests.get(url, headers={"XApiKey": api_key})
3341
return handle_response(response)
3442

3543

36-
def get_algorithm_model(api_key, url=constants.ALGORITHM_ENDPOINT):
44+
def get_algorithm_model(api_key, base_url):
45+
url = get_algorithm_url(base_url)
3746
response = requests.get(url, headers={"XApiKey": api_key})
3847
return handle_response(response)
3948

4049

41-
def get_orders(api_key, query_params, url=constants.LIST_ORDERS_ENDPOINT):
50+
def get_orders(api_key, query_params, base_url):
51+
url = get_list_orders_url(base_url)
4252
response = requests.get(
4353
url, headers={"XApiKey": api_key}, params=query_params
4454
)
4555
return handle_response(response)
4656

4757

48-
def get_order(api_key, query_params, url=constants.RETRIEVE_ORDER_ENDPOINT):
58+
def get_order(api_key, query_params, base_url):
59+
url = get_retrieve_order_url(base_url, query_params["order_id"])
4960
response = requests.get(
5061
url, headers={"XApiKey": api_key}, params=query_params
5162
)
5263
return handle_response(response)
5364

5465

55-
def create_order(api_key, data, url=constants.CREATE_ORDER_ENDPOINT):
66+
def create_order(api_key, data, base_url):
67+
url = create_order_url(base_url)
5668
response = requests.post(
5769
url, headers={"XApiKey": api_key}, json=json.dumps(data)
5870
)
5971
return handle_response(response)
6072

6173

62-
def get_positions(api_key, query_params, url=constants.LIST_POSITIONS):
74+
def get_positions(api_key, query_params, base_url):
75+
url = get_list_positions_url(base_url)
6376
response = requests.get(
6477
url, headers={"XApiKey": api_key}, params=query_params
6578
)
6679
return handle_response(response)
6780

6881

69-
def get_position(api_key, position_id, url=constants.RETRIEVE_POSITION):
70-
response = requests.get(
71-
url.format(position_id=position_id), headers={"XApiKey": api_key}
72-
)
82+
def get_position(api_key, position_id, base_url):
83+
url = get_retrieve_position_url(base_url, position_id)
84+
response = requests.get(url, headers={"XApiKey": api_key})
7385
return handle_response(response)
7486

7587

76-
def get_portfolio(api_key, url=constants.PORTFOLIO_ENDPOINT):
88+
def get_portfolio(api_key, base_url):
89+
url = get_retrieve_portfolio_url(base_url)
7790
response = requests.get(url, headers={"XApiKey": api_key})
7891
return handle_response(response)

version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION = (0, 4, 0, 'alpha', 0)
1+
VERSION = (0, 5, 0, 'alpha', 0)
22

33

44
def get_version(version=None):

0 commit comments

Comments
 (0)