added requirements.txt, added rate limiting

This commit is contained in:
2021-05-12 22:05:55 +02:00
parent 47ec6ecefc
commit 9bcd144858
4 changed files with 27 additions and 3 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
__pycache__
*egg-info/
.env
.venv

View File

@@ -1,10 +1,13 @@
import datetime as dt
import hashlib
import hmac
import json
from time import sleep
from typing import List, NewType, Optional, Dict, Union
import urllib
from urllib.parse import urlencode
from expiringdict import ExpiringDict
import requests
from . import constants
@@ -30,6 +33,10 @@ class DoesntExist(Exception):
class Client:
_requests = ExpiringDict(
max_len=constants.RATE_LIMIT_PER_SECOND, max_age_seconds=60
)
def __init__(
self, key: str, secret: str, subaccount: Optional[str] = None, timeout: int = 30
):
@@ -91,6 +98,14 @@ class Client:
return url
def _send_request(self, method: str, endpoint: str, query: Optional[dict] = None):
# .values() because of a bug in len(ExpiringDict)
if len(self._requests.values()) == constants.RATE_LIMIT_PER_SECOND:
print(
"waiting half a second because there have been "
f"{constants.RATE_LIMIT_PER_SECOND} requests in the past second.\n"
f"{method}: '{endpoint}' query='{query}'"
)
sleep(.5)
query = query or {}
scope = "public"
@@ -112,6 +127,9 @@ class Client:
response = requests.delete(url, headers=headers, json=query).json()
except Exception as e:
print("[x] Error: {}".format(e.args[0]))
finally:
# increment the number of requests in the past second
self._requests[dt.datetime.now()] = None
if "result" in response:
return response["result"]
@@ -222,9 +240,7 @@ class Client:
:return: a list contains all available perpetual futures
"""
return [
future for future in self.get_futures() if future["perpetual"]
]
return [future for future in self.get_futures() if future["perpetual"]]
def get_future(self, pair: str) -> dict:
"""

View File

@@ -17,3 +17,4 @@ PRIVATE_ENDPOINTS = (
"funding_payments",
)
VALID_CHAINS = ("omni", "erc20", "trx", "sol", "bep2")
RATE_LIMIT_PER_SECOND = 30

6
requirements.txt Normal file
View File

@@ -0,0 +1,6 @@
certifi==2020.12.5
chardet==4.0.0
expiringdict==1.2.1
idna==2.10
requests==2.25.1
urllib3==1.26.4