xync-client 0.0.25.dev88__tar.gz → 0.0.25.dev90__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 (94) hide show
  1. {xync_client-0.0.25.dev88/xync_client.egg-info → xync_client-0.0.25.dev90}/PKG-INFO +1 -1
  2. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/Ex.py +7 -9
  3. xync_client-0.0.25.dev90/xync_client/Bybit/etype/ad.py +108 -0
  4. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Bybit/ex.py +42 -20
  5. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90/xync_client.egg-info}/PKG-INFO +1 -1
  6. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client.egg-info/SOURCES.txt +1 -0
  7. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/.env.sample +0 -0
  8. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/.gitignore +0 -0
  9. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/.pre-commit-config.yaml +0 -0
  10. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/README.md +0 -0
  11. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/makefile +0 -0
  12. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/pyproject.toml +0 -0
  13. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/setup.cfg +0 -0
  14. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/TestAgent.py +0 -0
  15. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/TestAsset.py +0 -0
  16. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/TestEx.py +0 -0
  17. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/TestOrder.py +0 -0
  18. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Binance/test_binance.py +0 -0
  19. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  20. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  21. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Gate/test_gate.py +0 -0
  22. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  23. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  24. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  25. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/__init__.py +0 -0
  26. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/_todo_refact/_test_ex.py +0 -0
  27. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/tests/res.js +0 -0
  28. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/Agent.py +0 -0
  29. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/Asset.py +0 -0
  30. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/AuthTrait.py +0 -0
  31. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/Base.py +0 -0
  32. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/BaseTest.py +0 -0
  33. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/InAgent.py +0 -0
  34. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/Order.py +0 -0
  35. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Abc/types.py +0 -0
  36. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/__init__.py +0 -0
  37. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/binance_async.py +0 -0
  38. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/earn_api.py +0 -0
  39. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/ex.py +0 -0
  40. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/exceptions.py +0 -0
  41. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/sapi.py +0 -0
  42. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Binance/web_c2c.py +0 -0
  43. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/__init__.py +0 -0
  44. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/agent.py +0 -0
  45. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/base.py +0 -0
  46. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/etype/ad.py +0 -0
  47. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/etype/pm.py +0 -0
  48. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/ex.py +0 -0
  49. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/req.mjs +0 -0
  50. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BingX/sign.js +0 -0
  51. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitGet/__init__.py +0 -0
  52. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitGet/agent.py +0 -0
  53. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitGet/etype/ad.py +0 -0
  54. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitGet/ex.py +0 -0
  55. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitGet/req.mjs +0 -0
  56. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/BitPapa/ex.py +0 -0
  57. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Bybit/agent.py +0 -0
  58. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Bybit/web_earn.py +0 -0
  59. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Bybit/web_p2p.py +0 -0
  60. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Gate/etype/ad.py +0 -0
  61. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Gate/ex.py +0 -0
  62. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Gate/premarket.py +0 -0
  63. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/agent.py +0 -0
  64. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/earn.py +0 -0
  65. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/etype/__init__.py +0 -0
  66. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/etype/ad.py +0 -0
  67. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/etype/cred.py +0 -0
  68. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/etype/pm.py +0 -0
  69. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Htx/ex.py +0 -0
  70. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/KuCoin/etype/ad.py +0 -0
  71. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/KuCoin/etype/pm.py +0 -0
  72. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/KuCoin/ex.py +0 -0
  73. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/KuCoin/web.py +0 -0
  74. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Mexc/etype/ad.py +0 -0
  75. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Mexc/etype/pm.py +0 -0
  76. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Mexc/ex.py +0 -0
  77. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Okx/etype/ad.py +0 -0
  78. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Okx/etype/pm.py +0 -0
  79. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/Okx/ex.py +0 -0
  80. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/agent.py +0 -0
  81. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/asset.py +0 -0
  82. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/auth.py +0 -0
  83. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/ex.py +0 -0
  84. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/inAgent.py +0 -0
  85. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/order.py +0 -0
  86. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/pyd.py +0 -0
  87. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/pyro.py +0 -0
  88. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/TgWallet/web.py +0 -0
  89. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/__init__.py +0 -0
  90. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/loader.py +0 -0
  91. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client/pm_unifier.py +0 -0
  92. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client.egg-info/dependency_links.txt +0 -0
  93. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client.egg-info/requires.txt +0 -0
  94. {xync_client-0.0.25.dev88 → xync_client-0.0.25.dev90}/xync_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.25.dev88
3
+ Version: 0.0.25.dev90
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
@@ -167,15 +167,13 @@ class BaseExClient(BaseClient):
167
167
  pmcurs = set()
168
168
  for cur_id, exids in cur2pms.items():
169
169
  for exid in exids:
170
- pmcurs.add(
171
- (
172
- await models.Pmcur.update_or_create(
173
- cur=curs[cur_id],
174
- pm=pms.get(exid)
175
- or (await models.Pmex.get(ex=self.ex, exid=exid).prefetch_related("pm")).pm,
176
- )
177
- )[0]
178
- )
170
+ if not (pm_id := pms.get(exid) and pms[exid].id):
171
+ if pmex := await models.Pmex.get_or_none(ex=self.ex, exid=exid):
172
+ pm_id = pmex.pm_id
173
+ else:
174
+ logging.critical(f"For cur {cur_id} not found pm#{exid}")
175
+ continue
176
+ pmcurs.add((await models.Pmcur.update_or_create(cur=curs[cur_id], pm_id=pm_id))[0])
179
177
  # pmcurexs = [Pmcurex(pmcur=pmcur, ex=self.ex) for pmcur in pmcurs]
180
178
  # await Pmcurex.bulk_create(pmcurexs)
181
179
 
@@ -0,0 +1,108 @@
1
+ from typing import List, Optional, Dict, Any
2
+ from pydantic import BaseModel
3
+ from xync_schema.types import BaseAd
4
+
5
+ class Currency(BaseModel):
6
+ currencyId: str
7
+ exchangeId: str
8
+ id: str
9
+ orgId: str
10
+ scale: int
11
+
12
+ class Token(BaseModel):
13
+ exchangeId: str
14
+ id: str
15
+ orgId: str
16
+ scale: int
17
+ sequence: int
18
+ tokenId: str
19
+
20
+ class SymbolInfo(BaseModel):
21
+ buyAd: Optional[Any]
22
+ buyFeeRate: str
23
+ currency: Currency
24
+ currencyId: str
25
+ currencyLowerMaxQuote: str
26
+ currencyMaxQuote: str
27
+ currencyMinQuote: str
28
+ exchangeId: str
29
+ id: str
30
+ itemDownRange: str
31
+ itemSideLimit: int
32
+ itemUpRange: str
33
+ kycCurrencyLimit: str
34
+ lowerLimitAlarm: int
35
+ orderAutoCancelMinute: int
36
+ orderFinishMinute: int
37
+ orgId: str
38
+ sellAd: Optional[Any]
39
+ sellFeeRate: str
40
+ status: int
41
+ token: Token
42
+ tokenId: str
43
+ tokenMaxQuote: str
44
+ tokenMinQuote: str
45
+ tradeSide: int
46
+ upperLimitAlarm: int
47
+
48
+ class TradingPreferenceSet(BaseModel):
49
+ completeRateDay30: str
50
+ hasCompleteRateDay30: int
51
+ hasNationalLimit: int
52
+ hasOrderFinishNumberDay30: int
53
+ hasRegisterTime: int
54
+ hasUnPostAd: int
55
+ isEmail: int
56
+ isKyc: int
57
+ isMobile: int
58
+ nationalLimit: str
59
+ orderFinishNumberDay30: int
60
+ registerTimeThreshold: int
61
+
62
+ class Ad(BaseAd):
63
+ accountId: str
64
+ authStatus: int
65
+ authTag: List[str]
66
+ ban: bool
67
+ baned: bool
68
+ blocked: str
69
+ createDate: str
70
+ currencyId: str
71
+ executedQuantity: str
72
+ fee: str
73
+ finishNum: int
74
+ frozenQuantity: str
75
+ id: str
76
+ isOnline: bool
77
+ itemType: str
78
+ lastLogoutTime: str
79
+ lastQuantity: str
80
+ makerContact: bool
81
+ maxAmount: str
82
+ minAmount: str
83
+ nickName: str
84
+ orderNum: int
85
+ paymentPeriod: int
86
+ payments: List[str]
87
+ premium: str
88
+ price: str
89
+ priceType: int
90
+ quantity: str
91
+ recentExecuteRate: int
92
+ recentOrderNum: int
93
+ recommend: bool
94
+ recommendTag: str
95
+ remark: str
96
+ side: int
97
+ status: int
98
+ symbolInfo: SymbolInfo
99
+ tokenId: str
100
+ tokenName: str
101
+ tradingPreferenceSet: TradingPreferenceSet
102
+ userId: str
103
+ userMaskId: str
104
+ userType: str
105
+ verificationOrderAmount: str
106
+ verificationOrderLabels: List[Any]
107
+ verificationOrderSwitch: bool
108
+ version: int
@@ -1,15 +1,16 @@
1
1
  import json
2
- from enum import IntEnum
3
- from xync_schema.models import Cur
2
+ from asyncio import run
3
+ from x_model import init_db
4
+ from xync_schema import types
5
+ from xync_schema import models
6
+ from xync_schema.models import Ex
4
7
 
5
- from xync_client.Abc.Base import ListOfDicts, MapOfIdsList, DictOfDicts, FlatDict
8
+ from xync_client.Abc.Base import MapOfIdsList
6
9
  from xync_client.Abc.Ex import BaseExClient
7
10
  from xync_client.pm_unifier import PmUnifier
8
-
9
-
10
- class AdsStatus(IntEnum):
11
- REST = 0
12
- WORKING = 1
11
+ from xync_client.loader import PG_DSN
12
+ from xync_client.Bybit.etype import ad
13
+ from xync_client.Abc.types import PmEx
13
14
 
14
15
 
15
16
  class ExClient(BaseExClient): # Bybit client
@@ -22,6 +23,7 @@ class ExClient(BaseExClient): # Bybit client
22
23
  "Local Card M-redTS": "MTS-bank",
23
24
  "Local Card-Green": "Sberbank",
24
25
  "Local Card-Yellow": "T-Bank",
26
+ "Banque de développement local (BDL)": "Banque de développement local (BDL)",
25
27
  }
26
28
 
27
29
  host = "api2.bybit.com"
@@ -33,15 +35,17 @@ class ExClient(BaseExClient): # Bybit client
33
35
  return resp["result"] # todo: tokens, pairs, ...
34
36
 
35
37
  # 19: Список поддерживаемых валют тейкера
36
- async def curs(self) -> FlatDict:
38
+ async def curs(self) -> dict[types.CurEx]:
37
39
  config = await self._get_config()
38
- return {c["currencyId"]: c["currencyId"] for c in config["currencies"]}
40
+ return {
41
+ c["currencyId"]: types.CurEx(exid=c["currencyId"], ticker=c["currencyId"]) for c in config["currencies"]
42
+ }
39
43
 
40
44
  # 20: Список платежных методов
41
- async def pms(self, _: Cur = None) -> DictOfDicts:
45
+ async def pms(self, cur: models.Cur = None) -> dict[int | str, PmEx]:
42
46
  pms = await self._post("/fiat/otc/configuration/queryAllPaymentList/")
43
47
  pms = pms["result"]["paymentConfigVo"]
44
- return {pm["paymentType"]: {"name": pm["paymentName"]} for pm in pms}
48
+ return {pm["paymentType"]: PmEx(exid=pm["paymentType"], name=pm["paymentName"]) for pm in pms}
45
49
 
46
50
  # 21: Список платежных методов по каждой валюте
47
51
  async def cur_pms_map(self) -> MapOfIdsList:
@@ -49,25 +53,25 @@ class ExClient(BaseExClient): # Bybit client
49
53
  return json.loads(pms["result"]["currencyPaymentIdMap"])
50
54
 
51
55
  # 22: Список торгуемых монет (с ограничениям по валютам, если есть)
52
- async def coins(self) -> FlatDict:
56
+ async def coins(self) -> dict[types.CoinEx]:
53
57
  config = await self._get_config()
54
- cc: set[str] = set()
58
+ all_pms = {} # c["tokenId"]
55
59
  for c in config["symbols"]:
56
- cc.add(c["tokenId"])
57
- return {c: c for c in cc}
60
+ all_pms[c["tokenId"]] = types.CoinEx(exid=c["tokenId"], ticker=c["tokenId"])
61
+ return all_pms
58
62
 
59
63
  # 23: Список пар валюта/монет
60
- async def pairs(self) -> MapOfIdsList:
64
+ async def pairs(self) -> tuple[MapOfIdsList, MapOfIdsList]:
61
65
  config = await self._get_config()
62
66
  cc: dict[str, set[str]] = {}
63
67
  for c in config["symbols"]:
64
68
  cc[c["currencyId"]] = cc.get(c["currencyId"], set()) | {c["tokenId"]}
65
- return cc
69
+ return cc, cc
66
70
 
67
71
  # 24: Список объяв по (buy/sell, cur, coin, pm)
68
72
  async def ads(
69
73
  self, coin_exid: str, cur_exid: str, is_sell: bool, pm_exids: list[str | int] = None, amount: int = None
70
- ) -> ListOfDicts:
74
+ ) -> list[ad.Ad]:
71
75
  data = {
72
76
  "userId": "",
73
77
  "tokenId": coin_exid,
@@ -81,4 +85,22 @@ class ExClient(BaseExClient): # Bybit client
81
85
  "canTrade": False,
82
86
  }
83
87
  ads = await self._post("/fiat/otc/item/online/", data)
84
- return ads["result"]["items"]
88
+ return [ad.Ad(**_ad) for _ad in ads["result"]["items"]]
89
+
90
+
91
+ async def main():
92
+ _ = await init_db(PG_DSN, models, True)
93
+ ex = await Ex.get(name="Bybit")
94
+ cl = ExClient(ex)
95
+ _ads = await cl.ads("USDT", "GEL", False)
96
+ await cl.set_pmcurexs()
97
+ await cl.set_coinexs()
98
+ _cr = await cl.curs()
99
+ _cn = await cl.coins()
100
+ await cl.set_pairs()
101
+ _pms = await cl.pms()
102
+ await cl.close()
103
+
104
+
105
+ if __name__ == "__main__":
106
+ run(main())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.25.dev88
3
+ Version: 0.0.25.dev90
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
@@ -60,6 +60,7 @@ xync_client/Bybit/agent.py
60
60
  xync_client/Bybit/ex.py
61
61
  xync_client/Bybit/web_earn.py
62
62
  xync_client/Bybit/web_p2p.py
63
+ xync_client/Bybit/etype/ad.py
63
64
  xync_client/Gate/ex.py
64
65
  xync_client/Gate/premarket.py
65
66
  xync_client/Gate/etype/ad.py