Merge pull request #5 from Irishery/working_on_rps

RPS update
api-breakage
Irishery 4 years ago committed by GitHub
commit 2ebee8fac7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 85
      src/cryptocom/exchange/api.py
  2. 1
      tests/test_api.py

@ -1,6 +1,5 @@
import os
import json
import re
import time
import hmac
import random
@ -16,6 +15,33 @@ import aiohttp
from aiohttp.client_exceptions import ContentTypeError
RATE_LIMITS = {
# order methods
(
'private/create-order',
'private/cancel-order',
'private/cancel-all-orders',
'private/margin/create-order',
'private/margin/cancel-order',
'private/margin/cancel-all-orders',
): (14, 0.1),
# order detail methods
(
'private/get-order-detail',
'private/margin/get-order-detail',
): (29, 0.1),
# general trade methods
(
'private/get-trades',
'private/margin/get-trades',
'private/get-order-history',
'private/margin/get-order-history'
): (1, 1)
}
class ApiError(Exception):
pass
@ -35,51 +61,12 @@ class ApiProvider:
self.timeout = timeout
self.retries = retries
self.last_request_path = ''
self.limits = {
# method: (req_limit, period)
'private/create-order': (14, 0.1),
'private/cancel-order': (14, 0.1),
'private/cancel-all-orders': (14, 0.1),
'private/margin/create-order': (14, 0.1),
'private/margin/cancel-order': (14, 0.1),
'private/margin/cancel-all-orders': (14, 0.1),
'private/get-order-detail': (29, 0.1),
'private/margin/get-order-detail': (29, 0.1),
'private/get-trades': (1, 1),
'private/margin/get-trades': (1, 1),
'private/get-order-history': (1, 1),
'private/margin/get-order-history': (1, 1)
}
# lists for methods - aiolimiter metching
self.order_methods = [
'private/create-order',
'private/cancel-order',
'private/cancel-all-orders',
'private/margin/create-order',
'private/margin/cancel-order',
'private/margin/cancel-all-orders',
]
self.order_methods_limit = AsyncLimiter(14, 0.1)
self.rate_limiters = {}
self.detail_methods = [
'private/get-order-detail',
'private/margin/get-order-detail',
]
self.detail_methods_limit = AsyncLimiter(29, 0.1)
self.general_trade_methods = [
'private/get-trades',
'private/margin/get-trades',
'private/get-order-history',
'private/margin/get-order-history'
]
self.general_trade_methods_limit = AsyncLimiter(1, 1)
for urls in RATE_LIMITS:
for url in urls:
self.rate_limiters[url] = AsyncLimiter(*RATE_LIMITS[urls])
# limits for not matched methods
self.general_private_limit = AsyncLimiter(3, 0.1)
@ -127,13 +114,9 @@ class ApiProvider:
return data
def set_limit(self, path):
if path in self.order_methods:
return self.order_methods_limit
elif path in self.detail_methods:
return self.detail_methods_limit
elif path in self.general_trade_methods:
return self.general_trade_methods_limit
if path in self.rate_limiters.keys():
return self.rate_limiters[path]
else:
if path.startswith('private'):
return self.general_private_limit

@ -1,5 +1,4 @@
import asyncio
from asyncio.events import get_running_loop
import os
import time
import pytest

Loading…
Cancel
Save