xync-client 0.0.25.dev59__tar.gz → 0.0.25.dev62__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {xync_client-0.0.25.dev59/xync_client.egg-info → xync_client-0.0.25.dev62}/PKG-INFO +1 -1
  2. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/TestEx.py +8 -0
  3. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/Ex.py +18 -0
  4. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/ex.py +4 -3
  5. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/ex.py +5 -4
  6. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/KuCoin/etype/ad.py +6 -3
  7. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/KuCoin/ex.py +34 -18
  8. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62/xync_client.egg-info}/PKG-INFO +1 -1
  9. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/.env.sample +0 -0
  10. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/.gitignore +0 -0
  11. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/.pre-commit-config.yaml +0 -0
  12. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/README.md +0 -0
  13. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/makefile +0 -0
  14. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/pyproject.toml +0 -0
  15. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/setup.cfg +0 -0
  16. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/TestAgent.py +0 -0
  17. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/TestAsset.py +0 -0
  18. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/TestOrder.py +0 -0
  19. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Binance/test_binance.py +0 -0
  20. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  21. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  22. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Gate/test_gate.py +0 -0
  23. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  24. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  25. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  26. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/__init__.py +0 -0
  27. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/tests/_todo_refact/_test_ex.py +0 -0
  28. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/Agent.py +0 -0
  29. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/Asset.py +0 -0
  30. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/AuthTrait.py +0 -0
  31. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/Base.py +0 -0
  32. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/BaseTest.py +0 -0
  33. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/InAgent.py +0 -0
  34. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/Order.py +0 -0
  35. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Abc/types.py +0 -0
  36. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/__init__.py +0 -0
  37. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/binance_async.py +0 -0
  38. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/earn_api.py +0 -0
  39. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/ex.py +0 -0
  40. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/exceptions.py +0 -0
  41. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/sapi.py +0 -0
  42. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Binance/web_c2c.py +0 -0
  43. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/__init__.py +0 -0
  44. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/agent.py +0 -0
  45. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/base.py +0 -0
  46. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/etype/ad.py +0 -0
  47. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/etype/pm.py +0 -0
  48. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/req.mjs +0 -0
  49. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BingX/sign.js +0 -0
  50. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BitGet/__init__.py +0 -0
  51. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BitGet/agent.py +0 -0
  52. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BitGet/ex.py +0 -0
  53. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/BitGet/req.mjs +0 -0
  54. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Bybit/agent.py +0 -0
  55. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Bybit/ex.py +0 -0
  56. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Bybit/web_earn.py +0 -0
  57. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Bybit/web_p2p.py +0 -0
  58. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Gate/ex.py +0 -0
  59. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Gate/premarket.py +0 -0
  60. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/agent.py +0 -0
  61. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/earn.py +0 -0
  62. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/etype/__init__.py +0 -0
  63. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/etype/ad.py +0 -0
  64. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/etype/cred.py +0 -0
  65. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Htx/etype/pm.py +0 -0
  66. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/KuCoin/etype/pm.py +0 -0
  67. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/KuCoin/web.py +0 -0
  68. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Okx/etype/ad.py +0 -0
  69. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Okx/etype/pm.py +0 -0
  70. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/Okx/ex.py +0 -0
  71. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/agent.py +0 -0
  72. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/asset.py +0 -0
  73. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/auth.py +0 -0
  74. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/ex.py +0 -0
  75. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/inAgent.py +0 -0
  76. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/order.py +0 -0
  77. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/pyd.py +0 -0
  78. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/pyro.py +0 -0
  79. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/TgWallet/web.py +0 -0
  80. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/__init__.py +0 -0
  81. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/loader.py +0 -0
  82. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/pm_unifier.py +0 -0
  83. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client/pyro.py +0 -0
  84. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client.egg-info/SOURCES.txt +0 -0
  85. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client.egg-info/dependency_links.txt +0 -0
  86. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client.egg-info/requires.txt +0 -0
  87. {xync_client-0.0.25.dev59 → xync_client-0.0.25.dev62}/xync_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: xync-client
3
- Version: 0.0.25.dev59
3
+ Version: 0.0.25.dev62
4
4
  Author-email: Mike Artemiev <mixartemev@gmail.com>
5
5
  Project-URL: Homepage, https://gitlab.com/XyncNet/client
6
6
  Project-URL: Repository, https://gitlab.com/XyncNet/client
@@ -100,3 +100,11 @@ class TestEx(BaseTest):
100
100
  t, _ = await ExTest.update_or_create({"ok": True}, ex=client.ex, action=ExAction.set_pmcurs)
101
101
  assert t.ok, "PmCurs not set"
102
102
  logging.info(f"{client.ex.name}: {ExAction.ads.name} - ok")
103
+
104
+ # 0
105
+ async def test_set_pairs(self, clients: list[BaseExClient]):
106
+ for client in clients:
107
+ await client.set_pairs()
108
+ t, _ = await ExTest.update_or_create({"ok": True}, ex=client.ex, action=ExAction.set_pairs)
109
+ assert t.ok, "Pairs not set"
110
+ logging.info(f"{client.ex.name}: {ExAction.ads.name} - ok")
@@ -193,6 +193,24 @@ class BaseExClient(BaseClient):
193
193
  ]
194
194
  await models.Coinex.bulk_create(coinexs, update_fields=["minimum"], on_conflict=["coin_id", "ex_id"])
195
195
 
196
+ # Импорт пар биржи в бд
197
+ async def set_pairs(self):
198
+ curs: dict[str, CurEx] = {
199
+ k: (await models.Cur.get_or_create(ticker=c.ticker))[0] for k, c in (await self.curs()).items()
200
+ }
201
+ coins: dict[str, CoinEx] = {
202
+ k: (await models.Coin.get_or_create(ticker=c.ticker))[0] for k, c in (await self.coins()).items()
203
+ }
204
+ prs: tuple[dict, dict] = await self.pairs()
205
+ for is_sell in (0, 1):
206
+ dirs: list[models.Direction] = []
207
+ for cur, coinz in prs[is_sell].items():
208
+ for coin in coinz:
209
+ pair, _ = await models.Pair.get_or_create(coin=coins[coin], cur=curs[cur])
210
+ pairex, _ = await models.PairEx.get_or_create(pair=pair, ex=self.ex)
211
+ dirs += [models.Direction(sell=is_sell, pairex=pairex)]
212
+ await models.Direction.bulk_create(dirs, ignore_conflicts=True)
213
+
196
214
  # Сохранение чужого объявления (с Pm-ами) в бд
197
215
  async def ad_pydin2db(self, ad_pydin: BaseAdIn) -> models.Ad:
198
216
  ad_db, _ = await models.Ad.update_or_create(**ad_pydin.df_unq())
@@ -74,13 +74,13 @@ class ExClient(BaseExClient, BaseBingXClient):
74
74
 
75
75
  # 24: ads
76
76
  async def ads(
77
- self, coin_exid: str, cur_exid: str, is_sell: bool, pm_exids: list[str | int] = None, amount: int = None
77
+ self, coin_exid: str, cur_exid: str, is_sell: bool, pm_exids: list[str | int] = None, amount: int = None
78
78
  ) -> list[ad.Ad]:
79
79
  params = {
80
80
  "type": 1,
81
81
  "fiat": cur_exid,
82
82
  "asset": coin_exid,
83
- "amount": "",
83
+ "amount": amount,
84
84
  "hidePaymentInfo": "",
85
85
  "payMethodId": pm_exids if pm_exids else "",
86
86
  "isUserMatchCondition": "true" if is_sell else "false",
@@ -94,6 +94,8 @@ async def main():
94
94
  _ = await init_db(PG_DSN, models, True)
95
95
  bg = await Ex.get(name="BingX")
96
96
  cl = ExClient(bg)
97
+ _ads = await cl.ads("USDT", "RUB", False)
98
+ await cl.set_pairs()
97
99
  await cl.set_coinexs()
98
100
  await cl.set_pmcurexs()
99
101
  # _curs = await cl.curs()
@@ -101,7 +103,6 @@ async def main():
101
103
  # _pairs = await cl.pairs()
102
104
  # _pms = await cl.pms("EUR")
103
105
  # _pms_map = await cl.cur_pms_map()
104
- # _ads = await cl.ads("USDT", "RUB", False)
105
106
  await cl.close()
106
107
 
107
108
 
@@ -101,7 +101,7 @@ class ExClient(BaseExClient):
101
101
  return pmsd
102
102
 
103
103
  # 21: Get all: currency,pay,allCountry,coin
104
- async def curs(self) -> dict[str, types.CurEx]:
104
+ async def curs(self) -> dict[int, types.CurEx]:
105
105
  self.session.headers["client-type"] = "web"
106
106
  curs: list[dict] = (await self._coin_curs_pms())["currency"]
107
107
  cmap: dict[str, int] = {c["nameShort"]: c["currencyId"] for c in curs}
@@ -110,7 +110,7 @@ class ExClient(BaseExClient):
110
110
  for c in res:
111
111
  for q in c["quoteAsset"]:
112
112
  cursd[q["name"]] = max(cursd.get(q["name"], 0), float(q["minAmount"]))
113
- return {tkr: types.CurEx(exid=exid, ticker=tkr, minimum=cursd.get(tkr)) for tkr, exid in cmap.items()}
113
+ return {exid: types.CurEx(exid=exid, ticker=tkr, minimum=cursd.get(tkr)) for tkr, exid in cmap.items()}
114
114
 
115
115
  # 22: Список платежных методов по каждой валюте
116
116
  async def cur_pms_map(self) -> dict[int, set[int]]:
@@ -119,13 +119,13 @@ class ExClient(BaseExClient):
119
119
  return {c["currencyId"]: set(c["supportPayments"]) - wrong_pms for c in res["currency"] if c["supportPayments"]}
120
120
 
121
121
  # 23: Список торгуемых монет
122
- async def coins(self) -> dict[str, types.CoinEx]:
122
+ async def coins(self) -> dict[int, types.CoinEx]:
123
123
  self.session.headers["client-type"] = "web"
124
124
  coins: list[dict] = (await self._coin_curs_pms())["coin"]
125
125
  cmap: dict[str, int] = {c["coinCode"]: c["coinId"] for c in coins}
126
126
  res = (await self._get("/-/x/otc/v1/trade/fast/config/list?side=buy&tradeMode=c2c_simple"))["data"]
127
127
  coinsl: list[str] = [c["cryptoAsset"]["name"] for c in res]
128
- return {tkr: types.CoinEx(exid=cid, ticker=tkr, p2p=tkr in coinsl) for tkr, cid in cmap.items()}
128
+ return {cid: types.CoinEx(exid=cid, ticker=tkr, p2p=tkr in coinsl) for tkr, cid in cmap.items()}
129
129
 
130
130
  # 99: Страны
131
131
  async def countries(self) -> list[Country]:
@@ -157,6 +157,7 @@ async def main():
157
157
  _ = await init_db(PG_DSN, models, True)
158
158
  ex = await Ex.get(name="Htx")
159
159
  cl = ExClient(ex)
160
+ await cl.set_pairs()
160
161
  await cl.pms()
161
162
  await cl.pairs()
162
163
  await cl.set_pmcurexs()
@@ -1,5 +1,7 @@
1
1
  from pydantic import BaseModel, Field
2
2
  from typing import List, Optional
3
+ from xync_schema.types import BaseAd
4
+
3
5
 
4
6
  class AdPayType(BaseModel):
5
7
  id: str
@@ -10,8 +12,9 @@ class AdPayType(BaseModel):
10
12
  subBranch: Optional[str] = None
11
13
  reservedFields: Optional[str] = None
12
14
 
13
- class Ad(BaseModel):
14
- id: str
15
+
16
+ class Ad(BaseAd):
17
+ exid: str | None = Field(alias="id")
15
18
  side: str
16
19
  legal: str
17
20
  currency: str
@@ -46,4 +49,4 @@ class Ad(BaseModel):
46
49
  tradeLimitTip: Optional[str] = None
47
50
  opponentBalanceLimit: str
48
51
  blackStatus: int
49
- self: bool
52
+ self: bool
@@ -14,58 +14,74 @@ from xync_client.Abc.types import PmEx
14
14
  class ExClient(BaseExClient):
15
15
  async def _pms(self, cur) -> list[pm.PmE]:
16
16
  params = {
17
- 'legal': cur,
18
- 'lang': 'ru_RU',
17
+ "legal": cur,
18
+ "lang": "ru_RU",
19
19
  }
20
20
  pms = await self._get("/_api/otc/legal/payTypes", params=params)
21
21
  return [pm.PmE(**_pm) for _pm in pms["data"]]
22
22
 
23
- async def curs(self) -> list[types.CurEx]:
23
+ async def curs(self) -> dict[types.CurEx]:
24
24
  curs = (await self._get("/_api/otc/dictionary/getData", {"type": "LEGAL"}))["data"]
25
- return {
26
- cur["typeCode"]:types.CurEx(exid=cur["typeCode"], ticker=cur["typeCode"]) for cur in curs
27
- }
25
+ return {cur["typeCode"]: types.CurEx(exid=cur["typeCode"], ticker=cur["typeCode"]) for cur in curs}
28
26
 
29
27
  async def pms(self, cur: models.Cur = None) -> dict[int | str, PmEx]:
30
28
  all_pms = {}
31
29
  for cur_obj in (await self.curs()).values():
32
30
  pms = await self._pms(cur_obj.ticker)
33
- for pm in pms:
34
- all_pms[pm.payTypeCode] = PmEx(exid=pm.payTypeCode, name=pm.payTypeName)
31
+ for p in pms:
32
+ all_pms[p.payTypeCode] = PmEx(exid=p.payTypeCode, name=p.payTypeName)
35
33
  return all_pms
36
34
 
37
35
  async def cur_pms_map(self) -> MapOfIdsList:
38
- return {cur.exid: [pm.payTypeCode for pm in await self._pms(cur.ticker)] for cur in (await self.curs()).values()}
36
+ return {
37
+ cur.exid: [pm.payTypeCode for pm in await self._pms(cur.ticker)] for cur in (await self.curs()).values()
38
+ }
39
39
 
40
- async def coins(self) -> list[types.CoinEx]:
40
+ async def coins(self) -> dict[types.CoinEx]:
41
41
  all_coins = {}
42
42
  for cur in (await self.curs()).keys():
43
43
  params = {
44
- 'legal': cur,
45
- 'lang': 'ru_RU',
44
+ "legal": cur,
45
+ "lang": "ru_RU",
46
46
  }
47
47
  coins = await self._get("/_api/otc/symbol/support", params=params)
48
48
  for coin in coins["data"]:
49
- all_coins[coin["currency"]] = types.CoinEx(exid=coin["currency"] ,ticker=coin["currency"], scale=coin["currencyPrecision"])
49
+ all_coins[coin["currency"]] = types.CoinEx(
50
+ exid=coin["currency"], ticker=coin["currency"], scale=coin["currencyPrecision"]
51
+ )
50
52
  return all_coins
51
53
 
52
- async def pairs(self) -> MapOfIdsList:
54
+ async def pairs(self) -> tuple[MapOfIdsList, MapOfIdsList]:
53
55
  coins = (await self.coins()).keys()
54
56
  curs = (await self.curs()).keys()
55
57
  s = {cur: {c for c in coins} for cur in curs}
56
58
  return s, s
57
59
 
58
60
  async def ads(
59
- self, coin_exid: str, cur_exid: str, is_sell: bool, pm_exids: list[str | int] = None, amount: int = None
61
+ self, coin_exid: str, cur_exid: str, is_sell: bool, pm_exids: list[str | int] = None, amount: int = None
60
62
  ) -> list[ad.Ad]:
61
- pass
63
+ params = {
64
+ "status": "PUTUP",
65
+ "currency": coin_exid,
66
+ "legal": cur_exid,
67
+ "page": "1",
68
+ "pageSize": "10",
69
+ "side": "SELL",
70
+ "amount": amount or "",
71
+ "payTypeCodes": pm_exids or "",
72
+ "sortCode": "PRICE",
73
+ "highQualityMerchant": "0",
74
+ "lang": "ru_RU",
75
+ }
76
+ ads = await self._get("/_api/otc/ad/list", params=params)
77
+ return [ad.Ad(price=a["floatPrice"], **a) for a in ads["items"]]
62
78
 
63
79
 
64
80
  async def main():
65
81
  _ = await init_db(PG_DSN, models, True)
66
- bg = await Ex.get(name="KuCoin")
82
+ bg = await models.Ex.get(name="KuCoin")
67
83
  cl = ExClient(bg)
68
- # await cl.curs()
84
+ _ads = await cl.ads("USDT", "RUB", False)
69
85
  # await cl.coins()
70
86
  await cl.pms()
71
87
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: xync-client
3
- Version: 0.0.25.dev59
3
+ Version: 0.0.25.dev62
4
4
  Author-email: Mike Artemiev <mixartemev@gmail.com>
5
5
  Project-URL: Homepage, https://gitlab.com/XyncNet/client
6
6
  Project-URL: Repository, https://gitlab.com/XyncNet/client