Exemplo n.º 1
0
    def binance(args: tuple[str, URL], kwargs: dict[str, Any]) -> tuple[str, URL]:
        method: str = args[0]
        url: URL = args[1]
        data: dict[str, Any] = kwargs["data"] or {}
        headers: CIMultiDict = kwargs["headers"]

        session: aiohttp.ClientSession = kwargs["session"]
        key: str = session.__dict__["_apis"][Hosts.items[url.host].name][0]
        secret: bytes = session.__dict__["_apis"][Hosts.items[url.host].name][1]

        expires = str(int(time.time() * 1000))
        if method == METH_GET:
            if url.scheme == "https":
                query = MultiDict(url.query)
                query.extend({"timestamp": expires})
                query_string = "&".join(f"{k}={v}" for k, v in query.items())
                signature = hmac.new(
                    secret, query_string.encode(), hashlib.sha256
                ).hexdigest()
                query.extend({"signature": signature})
                url = url.with_query(query)
                args = (
                    method,
                    url,
                )
        else:
            data.update({"timestamp": expires})
            body = FormData(data)()
            signature = hmac.new(secret, body._value, hashlib.sha256).hexdigest()
            body._value += f"&signature={signature}".encode()
            body._size = len(body._value)
            kwargs.update({"data": body})
        headers.update({"X-MBX-APIKEY": key})

        return args
Exemplo n.º 2
0
    def bybit(args: Tuple[str, URL], kwargs: Dict[str,
                                                  Any]) -> Tuple[str, URL]:
        method: str = args[0]
        url: URL = args[1]
        data: Dict[str, Any] = kwargs['data'] or {}

        session: aiohttp.ClientSession = kwargs['session']
        key: str = session.__dict__['_apis'][Hosts.items[url.host].name][0]
        secret: bytes = session.__dict__['_apis'][Hosts.items[
            url.host].name][1]

        expires = str(int((time.time() + 1.0) * 1000))
        if method == METH_GET:
            query = MultiDict(url.query)
            if url.scheme == 'https':
                query.extend({'api_key': key, 'timestamp': expires})
                query_string = '&'.join(f'{k}={v}'
                                        for k, v in sorted(query.items()))
                sign = hmac.new(secret, query_string.encode(),
                                hashlib.sha256).hexdigest()
                query.extend({'sign': sign})
            else:
                path = f'{method}/realtime{expires}'
                signature = hmac.new(secret, path.encode(),
                                     hashlib.sha256).hexdigest()
                query.extend({
                    'api_key': key,
                    'expires': expires,
                    'signature': signature
                })
            url = url.with_query(query)
            args = (
                method,
                url,
            )
        else:
            data.update({'api_key': key, 'timestamp': expires})
            body = FormData(sorted(data.items()))()
            sign = hmac.new(secret, body._value, hashlib.sha256).hexdigest()
            body._value += f'&sign={sign}'.encode()
            body._size = len(body._value)
            kwargs.update({'data': body})

        return args
Exemplo n.º 3
0
    def bybit(args: tuple[str, URL], kwargs: dict[str, Any]) -> tuple[str, URL]:
        method: str = args[0]
        url: URL = args[1]
        data: dict[str, Any] = kwargs["data"] or {}

        session: aiohttp.ClientSession = kwargs["session"]
        key: str = session.__dict__["_apis"][Hosts.items[url.host].name][0]
        secret: bytes = session.__dict__["_apis"][Hosts.items[url.host].name][1]

        if url.scheme == "https":
            expires = str(int((time.time() - 5.0) * 1000))
            recv_window = (
                "recv_window" if not url.path.startswith("/spot") else "recvWindow"
            )
            auth_params = {"api_key": key, "timestamp": expires, recv_window: 10000}
            if method in (METH_GET, METH_DELETE):
                query = MultiDict(url.query)
                query.extend(auth_params)
                query_string = "&".join(f"{k}={v}" for k, v in sorted(query.items()))
                sign = hmac.new(
                    secret, query_string.encode(), hashlib.sha256
                ).hexdigest()
                query.extend({"sign": sign})
                url = url.with_query(query)
                args = (method, url)
            else:
                data.update(auth_params)
                body = FormData(sorted(data.items()))()
                sign = hmac.new(secret, body._value, hashlib.sha256).hexdigest()
                body._value += f"&sign={sign}".encode()
                body._size = len(body._value)
                kwargs.update({"data": body})
        elif url.scheme == "wss":
            query = MultiDict(url.query)
            expires = str(int((time.time() + 5.0) * 1000))
            path = f"{method}/realtime{expires}"
            signature = hmac.new(secret, path.encode(), hashlib.sha256).hexdigest()
            query.extend({"api_key": key, "expires": expires, "signature": signature})
            url = url.with_query(query)
            args = (method, url)

        return args
Exemplo n.º 4
0
    def binance(args: Tuple[str, URL], kwargs: Dict[str,
                                                    Any]) -> Tuple[str, URL]:
        method: str = args[0]
        url: URL = args[1]
        data: Dict[str, Any] = kwargs['data'] or {}
        headers: CIMultiDict = kwargs['headers']

        session: aiohttp.ClientSession = kwargs['session']
        key: str = session.__dict__['_apis'][Hosts.items[url.host].name][0]
        secret: bytes = session.__dict__['_apis'][Hosts.items[
            url.host].name][1]

        expires = str(int(time.time() * 1000))
        if method == METH_GET:
            if url.scheme == 'https':
                query = MultiDict(url.query)
                query.extend({'timestamp': expires})
                query_string = '&'.join(f'{k}={v}' for k, v in query.items())
                signature = hmac.new(secret, query_string.encode(),
                                     hashlib.sha256).hexdigest()
                query.extend({'signature': signature})
                url = url.with_query(query)
                args = (
                    method,
                    url,
                )
        else:
            data.update({'timestamp': expires})
            body = FormData(data)()
            signature = hmac.new(secret, body._value,
                                 hashlib.sha256).hexdigest()
            body._value += f'&signature={signature}'.encode()
            body._size = len(body._value)
            kwargs.update({'data': body})
        headers.update({'X-MBX-APIKEY': key})

        return args