Skip to content

Commit f3dca61

Browse files
authored
Merge pull request #2 from ttodua/build-2
websockets support
2 parents dd08476 + 74c3e36 commit f3dca61

File tree

5 files changed

+76
-153
lines changed

5 files changed

+76
-153
lines changed

build/build.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,14 @@ class build {
135135
fileContent = this.regexAll (fileContent, [
136136
[ new RegExp(`from ccxt\.${id} import ${id}.+\n`), '' ],
137137
[ new RegExp(`from ccxt\.async_support\.${id} import ${id}.+\n`), '' ],
138+
[ new RegExp(`from ccxt\.pro\.${id} import ${id}.+\n`), '' ],
138139
[ new RegExp(`\\s+'${id}',\n`), '' ],
139140
]).trim ()
140141
}
141142
}
142-
const importJunction = `import sys\nimport ${this.exchange}.ccxt as ccxt_module\nsys.modules[\'ccxt\'] = ccxt_module\n\n`;
143+
const importJunction = `import sys\n` +
144+
`import ${this.exchange}.ccxt as ccxt_module\n` +
145+
`sys.modules[\'ccxt\'] = ccxt_module\n\n`;
143146
fileContent = importJunction + fileContent;
144147
fs.writeFileSync(filePath, fileContent + '\n');
145148
}
@@ -150,10 +153,19 @@ class build {
150153
`import ${this.exchange}.ccxt as ccxt_module\n` +
151154
'sys.modules[\'ccxt\'] = ccxt_module\n\n' +
152155
`from ${this.exchange}.ccxt import ${this.exchange} as ${capitalized}Sync\n` +
153-
`from ${this.exchange}.ccxt.async_support.${this.exchange} import ${this.exchange} as ${capitalized}Async\n`;
156+
`from ${this.exchange}.ccxt.async_support.${this.exchange} import ${this.exchange} as ${capitalized}Async\n` +
157+
`from ${this.exchange}.ccxt.pro.${this.exchange} import ${this.exchange} as ${capitalized}Ws\n`
154158
fs.writeFileSync(this.destinationFolder + '/../__init__.py', cont);
155159
}
156160

161+
addWsLines () {
162+
const path = this.destinationFolder + `pro/${this.exchange}.py`;
163+
const fileContent = fs.readFileSync(path, 'utf8');
164+
const addLine = `from ccxt.async_support import ${this.exchange} as ${this.exchange}Async\n`;
165+
const newContent = fileContent.replace(/class \w+\(.*?\):/, addLine + `\n\nclass ${this.exchange}(${this.exchange}Async):`);
166+
fs.writeFileSync(path, newContent);
167+
}
168+
157169
async init (exchange:string) {
158170
if (this.downloadAndDelete) {
159171
await this.downloadRepo ();
@@ -163,7 +175,9 @@ class build {
163175
await this.creataPackageInitFile ();
164176

165177
await this.cleanInitFile (this.destinationFolder + '__init__.py');
166-
await this.cleanInitFile (this.destinationFolder + 'async_support/__init__.py', true);
178+
await this.cleanInitFile (this.destinationFolder + 'async_support/__init__.py');
179+
await this.cleanInitFile (this.destinationFolder + 'pro/__init__.py');
180+
this.addWsLines ();
167181

168182
// Remove git dir now (after reading exchanges)
169183
this.createMetaPackage ();

examples/websockets.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import os
2+
import sys
3+
import asyncio
4+
5+
root = os.path.dirname(os.path.dirname((os.path.abspath(__file__))))
6+
sys.path.append(root + '/')
7+
8+
from hyperliquid import HyperliquidWs
9+
10+
# ********** on Windows, uncomment below **********
11+
if sys.platform == 'win32':
12+
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
13+
14+
15+
async def my_watch_ticker_my(exchange, symbol):
16+
while (True):
17+
result = await exchange.watch_ticker(symbol)
18+
print(result)
19+
20+
21+
async def my_watch_orderbook(exchange, symbol):
22+
while (True):
23+
result = await exchange.watch_order_book(symbol)
24+
print(result)
25+
26+
27+
28+
29+
async def main():
30+
instance = HyperliquidWs({})
31+
await instance.load_markets()
32+
symbol = "BTC/USDC:USDC"
33+
34+
# fetch ticker
35+
ticker = my_watch_ticker_my(instance, symbol)
36+
37+
# fetch orderbook
38+
ob = my_watch_orderbook(instance, symbol)
39+
40+
await asyncio.gather(ticker, ob)
41+
42+
# close after you finish
43+
await instance.close()
44+
45+
46+
47+
48+
asyncio.run(main())
49+

hyperliquid/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
from hyperliquid.ccxt import hyperliquid as HyperliquidSync
66
from hyperliquid.ccxt.async_support.hyperliquid import hyperliquid as HyperliquidAsync
7+
from hyperliquid.ccxt.pro.hyperliquid import hyperliquid as HyperliquidWs

hyperliquid/ccxt/pro/__init__.py

Lines changed: 5 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import sys
2+
import hyperliquid.ccxt as ccxt_module
3+
sys.modules['ccxt'] = ccxt_module
4+
15
# -*- coding: utf-8 -*-
26

37
"""CCXT: CryptoCurrency eXchange Trading Library (Async)"""
@@ -12,154 +16,6 @@
1216

1317
# CCXT Pro exchanges (now this is mainly used for importing exchanges in WS tests)
1418

15-
from ccxt.pro.alpaca import alpaca # noqa: F401
16-
from ccxt.pro.ascendex import ascendex # noqa: F401
17-
from ccxt.pro.bequant import bequant # noqa: F401
18-
from ccxt.pro.binance import binance # noqa: F401
19-
from ccxt.pro.binancecoinm import binancecoinm # noqa: F401
20-
from ccxt.pro.binanceus import binanceus # noqa: F401
21-
from ccxt.pro.binanceusdm import binanceusdm # noqa: F401
22-
from ccxt.pro.bingx import bingx # noqa: F401
23-
from ccxt.pro.bitcoincom import bitcoincom # noqa: F401
24-
from ccxt.pro.bitfinex import bitfinex # noqa: F401
25-
from ccxt.pro.bitfinex1 import bitfinex1 # noqa: F401
26-
from ccxt.pro.bitget import bitget # noqa: F401
27-
from ccxt.pro.bithumb import bithumb # noqa: F401
28-
from ccxt.pro.bitmart import bitmart # noqa: F401
29-
from ccxt.pro.bitmex import bitmex # noqa: F401
30-
from ccxt.pro.bitopro import bitopro # noqa: F401
31-
from ccxt.pro.bitpanda import bitpanda # noqa: F401
32-
from ccxt.pro.bitrue import bitrue # noqa: F401
33-
from ccxt.pro.bitstamp import bitstamp # noqa: F401
34-
from ccxt.pro.bitvavo import bitvavo # noqa: F401
35-
from ccxt.pro.blockchaincom import blockchaincom # noqa: F401
36-
from ccxt.pro.blofin import blofin # noqa: F401
37-
from ccxt.pro.bybit import bybit # noqa: F401
38-
from ccxt.pro.cex import cex # noqa: F401
39-
from ccxt.pro.coinbase import coinbase # noqa: F401
40-
from ccxt.pro.coinbaseadvanced import coinbaseadvanced # noqa: F401
41-
from ccxt.pro.coinbaseexchange import coinbaseexchange # noqa: F401
42-
from ccxt.pro.coinbaseinternational import coinbaseinternational # noqa: F401
43-
from ccxt.pro.coincatch import coincatch # noqa: F401
44-
from ccxt.pro.coincheck import coincheck # noqa: F401
45-
from ccxt.pro.coinex import coinex # noqa: F401
46-
from ccxt.pro.coinone import coinone # noqa: F401
47-
from ccxt.pro.cryptocom import cryptocom # noqa: F401
48-
from ccxt.pro.defx import defx # noqa: F401
49-
from ccxt.pro.deribit import deribit # noqa: F401
50-
from ccxt.pro.derive import derive # noqa: F401
51-
from ccxt.pro.exmo import exmo # noqa: F401
52-
from ccxt.pro.gate import gate # noqa: F401
53-
from ccxt.pro.gateio import gateio # noqa: F401
54-
from ccxt.pro.gemini import gemini # noqa: F401
55-
from ccxt.pro.hashkey import hashkey # noqa: F401
56-
from ccxt.pro.hitbtc import hitbtc # noqa: F401
57-
from ccxt.pro.hollaex import hollaex # noqa: F401
58-
from ccxt.pro.htx import htx # noqa: F401
59-
from ccxt.pro.huobi import huobi # noqa: F401
60-
from ccxt.pro.huobijp import huobijp # noqa: F401
6119
from ccxt.pro.hyperliquid import hyperliquid # noqa: F401
62-
from ccxt.pro.idex import idex # noqa: F401
63-
from ccxt.pro.independentreserve import independentreserve # noqa: F401
64-
from ccxt.pro.kraken import kraken # noqa: F401
65-
from ccxt.pro.krakenfutures import krakenfutures # noqa: F401
66-
from ccxt.pro.kucoin import kucoin # noqa: F401
67-
from ccxt.pro.kucoinfutures import kucoinfutures # noqa: F401
68-
from ccxt.pro.lbank import lbank # noqa: F401
69-
from ccxt.pro.luno import luno # noqa: F401
70-
from ccxt.pro.mexc import mexc # noqa: F401
71-
from ccxt.pro.myokx import myokx # noqa: F401
72-
from ccxt.pro.ndax import ndax # noqa: F401
73-
from ccxt.pro.okcoin import okcoin # noqa: F401
74-
from ccxt.pro.okx import okx # noqa: F401
75-
from ccxt.pro.onetrading import onetrading # noqa: F401
76-
from ccxt.pro.oxfun import oxfun # noqa: F401
77-
from ccxt.pro.p2b import p2b # noqa: F401
78-
from ccxt.pro.paradex import paradex # noqa: F401
79-
from ccxt.pro.phemex import phemex # noqa: F401
80-
from ccxt.pro.poloniex import poloniex # noqa: F401
81-
from ccxt.pro.poloniexfutures import poloniexfutures # noqa: F401
82-
from ccxt.pro.probit import probit # noqa: F401
83-
from ccxt.pro.upbit import upbit # noqa: F401
84-
from ccxt.pro.vertex import vertex # noqa: F401
85-
from ccxt.pro.whitebit import whitebit # noqa: F401
86-
from ccxt.pro.woo import woo # noqa: F401
87-
from ccxt.pro.woofipro import woofipro # noqa: F401
88-
from ccxt.pro.xt import xt # noqa: F401
8920

90-
exchanges = [
91-
'alpaca',
92-
'ascendex',
93-
'bequant',
94-
'binance',
95-
'binancecoinm',
96-
'binanceus',
97-
'binanceusdm',
98-
'bingx',
99-
'bitcoincom',
100-
'bitfinex',
101-
'bitfinex1',
102-
'bitget',
103-
'bithumb',
104-
'bitmart',
105-
'bitmex',
106-
'bitopro',
107-
'bitpanda',
108-
'bitrue',
109-
'bitstamp',
110-
'bitvavo',
111-
'blockchaincom',
112-
'blofin',
113-
'bybit',
114-
'cex',
115-
'coinbase',
116-
'coinbaseadvanced',
117-
'coinbaseexchange',
118-
'coinbaseinternational',
119-
'coincatch',
120-
'coincheck',
121-
'coinex',
122-
'coinone',
123-
'cryptocom',
124-
'defx',
125-
'deribit',
126-
'derive',
127-
'exmo',
128-
'gate',
129-
'gateio',
130-
'gemini',
131-
'hashkey',
132-
'hitbtc',
133-
'hollaex',
134-
'htx',
135-
'huobi',
136-
'huobijp',
137-
'hyperliquid',
138-
'idex',
139-
'independentreserve',
140-
'kraken',
141-
'krakenfutures',
142-
'kucoin',
143-
'kucoinfutures',
144-
'lbank',
145-
'luno',
146-
'mexc',
147-
'myokx',
148-
'ndax',
149-
'okcoin',
150-
'okx',
151-
'onetrading',
152-
'oxfun',
153-
'p2b',
154-
'paradex',
155-
'phemex',
156-
'poloniex',
157-
'poloniexfutures',
158-
'probit',
159-
'upbit',
160-
'vertex',
161-
'whitebit',
162-
'woo',
163-
'woofipro',
164-
'xt',
165-
]
21+
exchanges = [ 'hyperliquid',]

hyperliquid/ccxt/pro/hyperliquid.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
from ccxt.base.errors import ExchangeError
1212

1313

14-
class hyperliquid(ccxt.async_support.hyperliquid):
14+
from ccxt.async_support import hyperliquid as hyperliquidAsync
15+
16+
17+
class hyperliquid(hyperliquidAsync):
1518

1619
def describe(self) -> Any:
1720
return self.deep_extend(super(hyperliquid, self).describe(), {

0 commit comments

Comments
 (0)