xync-client 0.0.25.dev51__tar.gz → 0.0.25.dev56__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.dev51/xync_client.egg-info → xync_client-0.0.25.dev56}/PKG-INFO +1 -1
  2. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/ex.py +3 -3
  3. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/KuCoin/ex.py +26 -19
  4. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Okx/ex.py +7 -6
  5. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/pm_unifier.py +11 -7
  6. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56/xync_client.egg-info}/PKG-INFO +1 -1
  7. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/.env.sample +0 -0
  8. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/.gitignore +0 -0
  9. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/.pre-commit-config.yaml +0 -0
  10. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/README.md +0 -0
  11. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/makefile +0 -0
  12. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/pyproject.toml +0 -0
  13. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/setup.cfg +0 -0
  14. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/TestAgent.py +0 -0
  15. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/TestAsset.py +0 -0
  16. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/TestEx.py +0 -0
  17. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/TestOrder.py +0 -0
  18. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Binance/test_binance.py +0 -0
  19. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  20. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  21. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Gate/test_gate.py +0 -0
  22. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  23. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  24. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  25. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/__init__.py +0 -0
  26. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/tests/_todo_refact/_test_ex.py +0 -0
  27. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/Agent.py +0 -0
  28. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/Asset.py +0 -0
  29. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/AuthTrait.py +0 -0
  30. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/Base.py +0 -0
  31. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/BaseTest.py +0 -0
  32. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/Ex.py +0 -0
  33. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/InAgent.py +0 -0
  34. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/Order.py +0 -0
  35. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Abc/types.py +0 -0
  36. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/__init__.py +0 -0
  37. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/binance_async.py +0 -0
  38. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/earn_api.py +0 -0
  39. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/ex.py +0 -0
  40. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/exceptions.py +0 -0
  41. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/sapi.py +0 -0
  42. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Binance/web_c2c.py +0 -0
  43. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/__init__.py +0 -0
  44. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/agent.py +0 -0
  45. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/base.py +0 -0
  46. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/etype/ad.py +0 -0
  47. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/etype/pm.py +0 -0
  48. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/req.mjs +0 -0
  49. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BingX/sign.js +0 -0
  50. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BitGet/__init__.py +0 -0
  51. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BitGet/agent.py +0 -0
  52. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BitGet/ex.py +0 -0
  53. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/BitGet/req.mjs +0 -0
  54. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Bybit/agent.py +0 -0
  55. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Bybit/ex.py +0 -0
  56. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Bybit/web_earn.py +0 -0
  57. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Bybit/web_p2p.py +0 -0
  58. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Gate/ex.py +0 -0
  59. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Gate/premarket.py +0 -0
  60. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/agent.py +0 -0
  61. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/earn.py +0 -0
  62. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/etype/__init__.py +0 -0
  63. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/etype/ad.py +0 -0
  64. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/etype/cred.py +0 -0
  65. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/etype/pm.py +0 -0
  66. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Htx/ex.py +0 -0
  67. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/KuCoin/etype/ad.py +0 -0
  68. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/KuCoin/etype/pm.py +0 -0
  69. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/KuCoin/web.py +0 -0
  70. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Okx/etype/ad.py +0 -0
  71. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/Okx/etype/pm.py +0 -0
  72. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/agent.py +0 -0
  73. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/asset.py +0 -0
  74. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/auth.py +0 -0
  75. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/ex.py +0 -0
  76. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/inAgent.py +0 -0
  77. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/order.py +0 -0
  78. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/pyd.py +0 -0
  79. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/pyro.py +0 -0
  80. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/TgWallet/web.py +0 -0
  81. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/__init__.py +0 -0
  82. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/loader.py +0 -0
  83. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client/pyro.py +0 -0
  84. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client.egg-info/SOURCES.txt +0 -0
  85. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client.egg-info/dependency_links.txt +0 -0
  86. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/xync_client.egg-info/requires.txt +0 -0
  87. {xync_client-0.0.25.dev51 → xync_client-0.0.25.dev56}/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.dev51
3
+ Version: 0.0.25.dev56
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
@@ -55,7 +55,7 @@ class ExClient(BaseExClient, BaseBingXClient):
55
55
  "coinType": "2",
56
56
  }
57
57
  curs = await self._get("/api/c2c/v1/common/supportCoins", params=params)
58
- return {cur["name"]: types.CurEx(exid=cur["id"], ticker=cur["name"]) for cur in curs["data"]["coins"]}
58
+ return {cur["name"]: types.CurEx(exid=cur["name"], ticker=cur["name"]) for cur in curs["data"]["coins"]}
59
59
 
60
60
  # 21: cur_pms_map на BingX
61
61
  async def cur_pms_map(self) -> MapOfIdsList:
@@ -63,7 +63,7 @@ class ExClient(BaseExClient, BaseBingXClient):
63
63
 
64
64
  # 22: Монеты на BingX
65
65
  async def coins(self) -> list[types.CoinEx]:
66
- return {"USDT": types.CoinEx(exid="1", ticker="USDT")}
66
+ return {"USDT": types.CoinEx(exid="USDT", ticker="USDT")}
67
67
 
68
68
  # 23: Список пар валюта/монет
69
69
  async def pairs(self) -> MapOfIdsList:
@@ -87,7 +87,7 @@ class ExClient(BaseExClient, BaseBingXClient):
87
87
  }
88
88
 
89
89
  ads = await self._get("/api/c2c/v1/advert/list", params=params)
90
- return [ad.Ad(**ad) for ad in ads["data"]["dataList"]]
90
+ return [ad.Ad(**_ad) for _ad in ads["data"]["dataList"]]
91
91
 
92
92
 
93
93
  async def main():
@@ -14,62 +14,69 @@ 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
23
  async def curs(self) -> list[types.CurEx]:
24
24
  curs = (await self._get("/_api/otc/dictionary/getData", {"type": "LEGAL"}))["data"]
25
- return {
26
- cur["typeCode"]:types.CurEx(exid=cur["id"], 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.payTypeId] = PmEx(exid=pm.payTypeId, 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.payTypeId 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
40
  async def coins(self) -> list[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["currencyPrecision"] ,ticker=coin["currency"])
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
54
  async def pairs(self) -> MapOfIdsList:
53
55
  coins = (await self.coins()).keys()
54
56
  curs = (await self.curs()).keys()
55
- b = {cur: {c for c in coins} for cur in curs}
56
57
  s = {cur: {c for c in coins} for cur in curs}
57
- return s, b
58
+ return s, s
58
59
 
59
60
  async def ads(
60
- 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
61
62
  ) -> list[ad.Ad]:
62
63
  pass
63
64
 
64
65
 
65
66
  async def main():
66
67
  _ = await init_db(PG_DSN, models, True)
67
- bg = await Ex.get(name="KuCoin")
68
+ bg = await models.Ex.get(name="KuCoin")
68
69
  cl = ExClient(bg)
69
- # await cl.curs()
70
- # await cl.coins()
71
- await cl.pms()
70
+ await cl.curs()
71
+ await cl.coins()
72
+ await cl.cur_pms_map()
73
+ await cl.pairs()
74
+ await cl.set_coinexs()
75
+ await cl.set_pmcurexs()
76
+ await cl.ads("USDT", "THB", False)
77
+ # pms = await cl.pms()
78
+ await cl.close()
72
79
 
73
80
 
74
81
  if __name__ == "__main__":
75
- run(main())
82
+ run(main())
@@ -18,13 +18,14 @@ class ExClient(BaseExClient):
18
18
  "needField": "false",
19
19
  }
20
20
  pms = await self._get("/v3/c2c/configs/receipt/templates", params=params)
21
- return [pm.PmE(**_pm) for _pm in pms["data"]]
21
+ return [pm.PmE(**_pm) for _pm in pms["data"] if _pm["paymentMethod"]]
22
22
 
23
23
  # 19: Список поддерживаемых валют тейкера
24
24
  async def curs(self) -> dict[int, types.CurEx]: # {cur.exid: cur.ticker}
25
25
  curs = await self._get("/v3/users/common/list/currencies")
26
26
  return {
27
- cur["displayName"]: types.CurEx(exid=cur["currencyId"], ticker=cur["displayName"]) for cur in curs["data"]
27
+ cur["displayName"]: types.CurEx(exid=cur["currencyId"], ticker=cur["displayName"], scale=cur["precision"])
28
+ for cur in curs["data"]
28
29
  }
29
30
 
30
31
  # 20: Список платежных методов
@@ -93,10 +94,10 @@ async def main():
93
94
  cl = ExClient(bg)
94
95
  # curs = await cl.curs()
95
96
  # coins = await cl.coins()
96
- await cl.pms()
97
- await cl.cur_pms_map()
98
- await cl.pairs()
99
- await cl.set_coinexs()
97
+ # await cl.pms()
98
+ # await cl.cur_pms_map()
99
+ # await cl.pairs()
100
+ # await cl.set_coinexs()
100
101
  await cl.set_pmcurexs()
101
102
  await cl.ads("USDT", "THB", False)
102
103
  await cl.close()
@@ -28,14 +28,15 @@ class PmUnifier:
28
28
  ]
29
29
  re_extra = [
30
30
  r"\(card\)$|\bpay$|\bmoney$|\bwallet$|\bcash$",
31
- r"b\.s\.c\.|k\.s\.c|s\.a$| sv$| gt$",
31
+ r"b\.s\.c\.|k\.s\.c|s\.a\.a\.?$|s\.a\.?$| sv$| gt$",
32
32
  ]
33
33
  re_glut = [
34
34
  r"\.io$|\.com$",
35
- r"l'|d’|d'",
35
+ r"l'|d’|d′|d'",
36
36
  ]
37
37
  i18n_map = {
38
- # " ": " ",
38
+ " - ": "-",
39
+ " & ": "&",
39
40
  "nationale": "national",
40
41
  "а": "a",
41
42
  "á": "a",
@@ -56,7 +57,7 @@ class PmUnifier:
56
57
  "ř": "r",
57
58
  "í": "i",
58
59
  }
59
- rms = " -:`'’′"
60
+ rms = ":`'’′"
60
61
 
61
62
  def __init__(self, countries: list[str]):
62
63
  self.cts = countries
@@ -91,7 +92,7 @@ class PmUnifier:
91
92
 
92
93
  def bank(self, name: str):
93
94
  for r in self.re_bank:
94
- if match := re.search(r, self.pms[name].norm):
95
+ if (match := re.search(r, self.pms[name].norm)) and match.group() != self.pms[name].norm:
95
96
  self.pms[name].norm = self.pms[name].norm.replace(match.group(), "")
96
97
  self.pms[name].bank = True
97
98
  self.clear(name)
@@ -111,7 +112,7 @@ class PmUnifier:
111
112
  or self.pms[name].norm.startswith((acr + " ", acr + ":"))
112
113
  or self.pms[name].norm.endswith(" " + acr)
113
114
  ):
114
- self.pms[name].norm = self.pms[name].norm.replace(acr, "", 1).replace("()", "", 1).strip()
115
+ self.pms[name].norm = self.pms[name].norm.replace(acr, "", 1)
115
116
  self.pms[name].acronym = acr
116
117
  self.clear(name)
117
118
 
@@ -124,7 +125,7 @@ class PmUnifier:
124
125
  self.pms[name].norm = self.pms[name].norm.replace(src, trgt)
125
126
 
126
127
  def clear(self, name: str):
127
- self.pms[name].norm = self.pms[name].norm.replace("()", "").replace(" ", " ").strip(" -:")
128
+ self.pms[name].norm = self.pms[name].norm.replace("()", "").replace(" ", " ").strip(" -:.")
128
129
 
129
130
  def __call__(self, s: str) -> PmUni:
130
131
  # если в словаре замен есть текущее назвние - меняем, иначе берем строку до запятой
@@ -147,5 +148,8 @@ class PmUnifier:
147
148
  self.extra(s)
148
149
  # вырезаем каждый символ rms
149
150
  [self.pms[s].norm.replace(rm, "") for rm in self.rms]
151
+ #
152
+ if not self.pms[s].norm and self.pms[s].bank:
153
+ self.pms[s].norm = "bank"
150
154
 
151
155
  return self.pms[s]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: xync-client
3
- Version: 0.0.25.dev51
3
+ Version: 0.0.25.dev56
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