xync-client 0.0.46.dev2__tar.gz → 0.0.48.dev1__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 (109) hide show
  1. {xync_client-0.0.46.dev2/xync_client.egg-info → xync_client-0.0.48.dev1}/PKG-INFO +1 -1
  2. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/Agent.py +4 -4
  3. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/Auth.py +2 -3
  4. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/Ex.py +32 -18
  5. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/types.py +5 -0
  6. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/ex.py +1 -0
  7. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Gate/ex.py +1 -0
  8. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/ex.py +3 -3
  9. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Mexc/ex.py +9 -9
  10. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1/xync_client.egg-info}/PKG-INFO +1 -1
  11. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client.egg-info/SOURCES.txt +0 -1
  12. xync_client-0.0.46.dev2/xync_client/Abc/Base.py +0 -17
  13. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/.env.sample +0 -0
  14. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/.gitignore +0 -0
  15. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/.pre-commit-config.yaml +0 -0
  16. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/README.md +0 -0
  17. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/makefile +0 -0
  18. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/pyproject.toml +0 -0
  19. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/setup.cfg +0 -0
  20. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/TestAgent.py +0 -0
  21. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/TestAsset.py +0 -0
  22. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/TestEx.py +0 -0
  23. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/TestOrder.py +0 -0
  24. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Binance/test_binance.py +0 -0
  25. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  26. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  27. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Gate/test_gate.py +0 -0
  28. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  29. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  30. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  31. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/__init__.py +0 -0
  32. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/tests/_todo_refact/_test_ex.py +0 -0
  33. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/Asset.py +0 -0
  34. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/BaseTest.py +0 -0
  35. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/InAgent.py +0 -0
  36. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Abc/Order.py +0 -0
  37. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/__init__.py +0 -0
  38. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/binance_async.py +0 -0
  39. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/earn_api.py +0 -0
  40. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/etype/ad.py +0 -0
  41. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/etype/pm.py +0 -0
  42. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/exceptions.py +0 -0
  43. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/sapi.py +0 -0
  44. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Binance/web_c2c.py +0 -0
  45. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/__init__.py +0 -0
  46. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/agent.py +0 -0
  47. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/base.py +0 -0
  48. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/etype/ad.py +0 -0
  49. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/etype/pm.py +0 -0
  50. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/ex.py +0 -0
  51. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/req.mjs +0 -0
  52. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BingX/sign.js +0 -0
  53. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BitGet/__init__.py +0 -0
  54. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BitGet/agent.py +0 -0
  55. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BitGet/etype/ad.py +0 -0
  56. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BitGet/ex.py +0 -0
  57. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/BitPapa/ex.py +0 -0
  58. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/InAgent.py +0 -0
  59. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/agent.py +0 -0
  60. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/etype/ad.py +0 -0
  61. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/etype/cred.py +0 -0
  62. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/etype/order.py +0 -0
  63. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/ex.py +0 -0
  64. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/web_earn.py +0 -0
  65. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/web_p2p.py +0 -0
  66. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Bybit/ws.py +0 -0
  67. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Gate/etype/ad.py +0 -0
  68. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Gate/premarket.py +0 -0
  69. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/agent.py +0 -0
  70. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/earn.py +0 -0
  71. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/etype/__init__.py +0 -0
  72. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/etype/ad.py +0 -0
  73. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/etype/cred.py +0 -0
  74. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/etype/pm.py +0 -0
  75. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Htx/etype/test.py +0 -0
  76. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/KuCoin/etype/ad.py +0 -0
  77. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/KuCoin/etype/pm.py +0 -0
  78. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/KuCoin/ex.py +0 -0
  79. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/KuCoin/web.py +0 -0
  80. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Mexc/etype/ad.py +0 -0
  81. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Mexc/etype/pm.py +0 -0
  82. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Okx/etype/ad.py +0 -0
  83. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Okx/etype/pm.py +0 -0
  84. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Okx/ex.py +0 -0
  85. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Alfa/__init__.py +0 -0
  86. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Alfa/state.json +0 -0
  87. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Sber/__init__.py +0 -0
  88. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Tinkoff/__init__.py +0 -0
  89. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Tinkoff/state.json +0 -0
  90. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Volet/__init__.py +0 -0
  91. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
  92. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
  93. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Volet/api.py +0 -0
  94. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/Pms/Volet/pl.py +0 -0
  95. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/agent.py +0 -0
  96. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/asset.py +0 -0
  97. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/auth.py +0 -0
  98. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/ex.py +0 -0
  99. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/inAgent.py +0 -0
  100. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/order.py +0 -0
  101. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/pyd.py +0 -0
  102. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/pyro.py +0 -0
  103. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/TgWallet/web.py +0 -0
  104. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/__init__.py +0 -0
  105. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/loader.py +0 -0
  106. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client/pm_unifier.py +0 -0
  107. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client.egg-info/dependency_links.txt +0 -0
  108. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/xync_client.egg-info/requires.txt +0 -0
  109. {xync_client-0.0.46.dev2 → xync_client-0.0.48.dev1}/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.46.dev2
3
+ Version: 0.0.48.dev1
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
@@ -1,20 +1,20 @@
1
1
  from abc import abstractmethod
2
2
 
3
3
  from pydantic import BaseModel
4
+ from x_client.aiohttp import Client as HttpClient
4
5
  from xync_schema import models
5
6
  from xync_schema.models import OrderStatus, Coin, Cur, Ad, AdStatus, Actor
6
7
  from xync_schema.types import BaseAd
7
8
 
8
9
  from xync_client.Abc.Ex import BaseExClient
9
- from xync_client.Abc.Base import BaseClient
10
10
  from xync_client.Abc.types import CredExOut, BaseOrderReq, BaseAdUpdate
11
11
 
12
12
 
13
- class BaseAgentClient(BaseClient):
13
+ class BaseAgentClient(HttpClient):
14
14
  def __init__(self, actor: Actor, headers: dict[str, str] = None, cookies: dict[str, str] = None):
15
15
  self.actor: Actor = actor
16
- super().__init__(actor.ex, "host_p2p", headers, cookies)
17
- self.ex_client: BaseExClient = self.ex.client(actor)
16
+ super().__init__(actor.ex.host_p2p, headers, cookies)
17
+ self.ex_client: BaseExClient = self.actor.ex.client(actor)
18
18
 
19
19
  # 0: Получшение ордеров в статусе status, по монете coin, в валюте coin, в направлении is_sell: bool
20
20
  @abstractmethod
@@ -3,12 +3,11 @@ from abc import abstractmethod
3
3
 
4
4
  from aiohttp import ClientResponse
5
5
  from aiohttp.http_exceptions import HttpProcessingError
6
+ from x_client.aiohttp import Client as HttpClient
6
7
  from xync_schema.models import Actor
7
8
 
8
- from xync_client.Abc.Base import BaseClient
9
9
 
10
-
11
- class BaseAuthClient(BaseClient):
10
+ class BaseAuthClient(HttpClient):
12
11
  actor: Actor = None
13
12
 
14
13
  @abstractmethod
@@ -3,29 +3,37 @@ from abc import abstractmethod
3
3
  from asyncio import sleep
4
4
 
5
5
  import msgspec
6
- from aiohttp import ClientSession
6
+ from aiohttp import ClientSession, ClientResponse
7
7
  from msgspec import Struct
8
8
  from pyro_client.client.file import FileClient
9
- from pyro_client.loader import API_ID, API_HASH
10
9
  from tortoise.exceptions import MultipleObjectsReturned, IntegrityError
10
+ from x_client.aiohttp import Client as HttpClient
11
11
  from xync_schema import models
12
12
  from xync_schema.enums import FileType, df_curs
13
13
  from xync_schema.types import CurEx, CoinEx, BaseAd, BaseAdIn
14
14
 
15
- from xync_client.Abc.Base import BaseClient, MapOfIdsList
16
- from xync_client.Abc.types import PmEx
17
- from xync_client.loader import TOKEN
15
+ from xync_client.Abc.types import PmEx, MapOfIdsList
18
16
  from xync_client.pm_unifier import PmUnifier, PmUni
19
17
 
20
18
 
21
- class BaseExClient(BaseClient):
19
+ class BaseExClient(HttpClient):
22
20
  cur_map: dict[int, str] = {}
23
21
  unifier_class: type = PmUnifier
24
- logo_map = {
25
- "Binance": "bin.bnbstatic.com",
26
- "Gate": "www.gate.io",
27
- "Mexc": "www.mexc.com/api/file/download",
28
- }
22
+ logo_pre_url: str
23
+ ex: models.Ex
24
+
25
+ def __init__(
26
+ self,
27
+ ex: models.Ex,
28
+ bot: FileClient,
29
+ attr: str = "host_p2p",
30
+ headers: dict[str, str] = None,
31
+ cookies: dict[str, str] = None,
32
+ proxy: models.Proxy = None,
33
+ ):
34
+ self.ex = ex
35
+ self.bot = bot
36
+ super().__init__(getattr(ex, attr), headers, cookies, proxy and proxy.str())
29
37
 
30
38
  @abstractmethod
31
39
  def pm_type_map(self, typ: models.Pmex) -> str: ...
@@ -176,8 +184,6 @@ class BaseExClient(BaseClient):
176
184
  )
177
185
 
178
186
  # Pmexs
179
- pbot = FileClient(API_ID, API_HASH, TOKEN)
180
- await pbot.start()
181
187
  async with ClientSession(headers=getattr(self, "logo_headers", None)) as ss:
182
188
  pmexs = [
183
189
  models.Pmex(
@@ -186,11 +192,10 @@ class BaseExClient(BaseClient):
186
192
  ex=self.ex,
187
193
  pm=pm,
188
194
  name=pmexs_epyds[k].name,
189
- logo=await self.logo_save(pmexs_epyds[k].logo, pbot, ss),
195
+ logo=await self.logo_save(pmexs_epyds[k].logo, ss),
190
196
  )
191
197
  for k, pm in pms.items()
192
198
  ]
193
- await pbot.stop()
194
199
 
195
200
  await models.Pmex.bulk_create(pmexs, on_conflict=["ex_id", "exid"], update_fields=["pm_id", "logo_id", "name"])
196
201
  # Pmex banks
@@ -215,17 +220,17 @@ class BaseExClient(BaseClient):
215
220
  # pmcurexs = [Pmcurex(pmcur=pmcur, ex=self.ex) for pmcur in pmcurs]
216
221
  # await Pmcurex.bulk_create(pmcurexs)
217
222
 
218
- async def logo_save(self, url: str | None, pbot: FileClient, ss: ClientSession) -> models.File | None:
223
+ async def logo_save(self, url: str | None, ss: ClientSession) -> models.File | None:
219
224
  if url or (file := None):
220
225
  if not url.startswith("https:"):
221
226
  if not url.startswith("/"):
222
227
  url = "/" + url
223
- url = "https://" + self.logo_map[self.ex.name] + url
228
+ url = "https://" + self.logo_pre_url + url
224
229
  if not (file := await models.File.get_or_none(name=url)):
225
230
  resp = await ss.get(url)
226
231
  if resp.ok:
227
232
  byts = await resp.read()
228
- upf, ref = await pbot.save_doc(byts, resp.content_type)
233
+ upf, ref = await self.bot.save_doc(byts, resp.content_type)
229
234
  await sleep(0.34)
230
235
  typ = FileType[resp.content_type.split("/")[-1]]
231
236
  file, _ = await models.File.update_or_create({"ref": ref, "size": len(byts), "typ": typ}, name=url)
@@ -271,3 +276,12 @@ class BaseExClient(BaseClient):
271
276
  await ad_db.credexs.add(*getattr(ad_pydin, "credexs_", []))
272
277
  await ad_db.pmexs.add(*getattr(ad_pydin, "pmexs_", []))
273
278
  return ad_db
279
+
280
+ async def _proc(self, resp: ClientResponse, data_key: str = None, body: dict | str = None) -> dict | str:
281
+ if resp.status in (401, 403):
282
+ proxy = await models.Proxy.filter(valid=True, country__short__not="US").order_by("-updated_at").first()
283
+ self.session = ClientSession(
284
+ self.session._base_url, headers=self.session.headers, cookies=self.session.cookie_jar, proxy=proxy
285
+ )
286
+ return await self.METHS[resp.method](self, resp.url.path, body, data_key=data_key)
287
+ return await super()._proc(resp, data_key)
@@ -8,6 +8,11 @@ from xync_schema.types import PmexBank
8
8
 
9
9
  from xync_client.pm_unifier import PmUni
10
10
 
11
+ DictOfDicts = dict[int | str, dict]
12
+ ListOfDicts = list[dict]
13
+ FlatDict = dict[int | str, str]
14
+ MapOfIdsList = dict[int | str, list[int | str]]
15
+
11
16
 
12
17
  class PmTrait:
13
18
  typ: PmType | None = None
@@ -21,6 +21,7 @@ class ExClient(BaseExClient):
21
21
  "Viettel Money": "ViettelPay",
22
22
  }
23
23
 
24
+ logo_pre_url = "bin.bnbstatic.com"
24
25
  unifier_class = BinanceUnifier
25
26
 
26
27
  async def _pms(self, cur) -> list[pm.PmE]:
@@ -28,6 +28,7 @@ class ExClient(BaseExClient):
28
28
  "Local Card (Red)": "Alfa-bank",
29
29
  }
30
30
 
31
+ logo_pre_url = "www.gate.io"
31
32
  unifier_class = GateUnifier
32
33
 
33
34
  # Данные для р2р из html Gate.io
@@ -7,9 +7,8 @@ from xync_schema import models, types
7
7
  from xync_schema.models import Ex, Cur
8
8
  from xync_schema.enums import PmType
9
9
 
10
- from xync_client.Abc.Base import MapOfIdsList
11
10
  from xync_client.Abc.Ex import BaseExClient
12
- from xync_client.Abc.types import PmEx
11
+ from xync_client.Abc.types import PmEx, MapOfIdsList
13
12
  from xync_client.Htx.etype import pm, Country, ad
14
13
  from xync_client.loader import PG_DSN
15
14
  from xync_client.pm_unifier import PmUnifier
@@ -40,7 +39,8 @@ class ExClient(BaseExClient):
40
39
  res = (await self._get(f"/-/x/otc/v1/trade/fast/config/list?side={side}&tradeMode=c2c_simple"))["data"]
41
40
  for coin in res:
42
41
  for cur in coin["quoteAsset"]:
43
- pair[rcurs[cur["name"]]] += [rcoins[coin["cryptoAsset"]["name"]]]
42
+ if coen := rcoins.get(coin["cryptoAsset"]["name"]):
43
+ pair[rcurs[cur["name"]]] += [coen]
44
44
  return tuple(pairs.values())
45
45
 
46
46
  async def ads(
@@ -15,6 +15,14 @@ from xync_schema.models import Ex
15
15
 
16
16
 
17
17
  class ExClient(BaseExClient):
18
+ class MexcUnifier(PmUnifier):
19
+ pm_map = {
20
+ "Philippine National Bank (PNB)": "Philippines National Bank (PNB)",
21
+ "Al-Rajhi Bank": "Al Rajhi Bank",
22
+ "SBP - Fast Bank Transfer": "SBP",
23
+ "Touch 'n Go": "Touch n Go",
24
+ }
25
+
18
26
  logo_headers = {
19
27
  "accept-language": "ru,en;q=0.9",
20
28
  "priority": "u=0, i",
@@ -24,15 +32,7 @@ class ExClient(BaseExClient):
24
32
  "sec-fetch-site": "none", # work from CURL, not work from aiohttp with no this header
25
33
  "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
26
34
  }
27
-
28
- class MexcUnifier(PmUnifier):
29
- pm_map = {
30
- "Philippine National Bank (PNB)": "Philippines National Bank (PNB)",
31
- "Al-Rajhi Bank": "Al Rajhi Bank",
32
- "SBP - Fast Bank Transfer": "SBP",
33
- "Touch 'n Go": "Touch n Go",
34
- }
35
-
35
+ logo_pre_url = "www.mexc.com/api/file/download"
36
36
  unifier_class = MexcUnifier
37
37
 
38
38
  async def _pms(self, cur) -> list[pm.PmE]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.46.dev2
3
+ Version: 0.0.48.dev1
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
@@ -28,7 +28,6 @@ xync_client.egg-info/top_level.txt
28
28
  xync_client/Abc/Agent.py
29
29
  xync_client/Abc/Asset.py
30
30
  xync_client/Abc/Auth.py
31
- xync_client/Abc/Base.py
32
31
  xync_client/Abc/BaseTest.py
33
32
  xync_client/Abc/Ex.py
34
33
  xync_client/Abc/InAgent.py
@@ -1,17 +0,0 @@
1
- from x_client.aiohttp import Client
2
- from xync_schema.models import Ex
3
-
4
- DictOfDicts = dict[int | str, dict]
5
- ListOfDicts = list[dict]
6
- FlatDict = dict[int | str, str]
7
- MapOfIdsList = dict[int | str, list[int | str]]
8
-
9
-
10
- class BaseClient(Client):
11
- ex: Ex
12
-
13
- def __init__(
14
- self, ex: Ex, attr: str = "host_p2p", headers: dict[str, str] = None, cookies: dict[str, str] = None, **kwargs
15
- ):
16
- self.ex = ex
17
- super().__init__(getattr(ex, attr), headers, cookies)