xync-client 0.0.57.dev12__tar.gz → 0.0.57.dev13__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 (112) hide show
  1. {xync_client-0.0.57.dev12/xync_client.egg-info → xync_client-0.0.57.dev13}/PKG-INFO +1 -1
  2. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/agent.py +35 -15
  3. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13/xync_client.egg-info}/PKG-INFO +1 -1
  4. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/.env.sample +0 -0
  5. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/.gitignore +0 -0
  6. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/.pre-commit-config.yaml +0 -0
  7. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/README.md +0 -0
  8. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/makefile +0 -0
  9. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/pyproject.toml +0 -0
  10. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/setup.cfg +0 -0
  11. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/TestAgent.py +0 -0
  12. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/TestAsset.py +0 -0
  13. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/TestEx.py +0 -0
  14. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/TestOrder.py +0 -0
  15. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Binance/test_binance.py +0 -0
  16. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  17. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  18. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Gate/test_gate.py +0 -0
  19. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  20. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  21. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  22. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/__init__.py +0 -0
  23. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/tests/_todo_refact/_test_ex.py +0 -0
  24. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/Agent.py +0 -0
  25. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/Asset.py +0 -0
  26. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/Auth.py +0 -0
  27. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/BaseTest.py +0 -0
  28. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/Ex.py +0 -0
  29. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/InAgent.py +0 -0
  30. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/Order.py +0 -0
  31. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Abc/xtype.py +0 -0
  32. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/__init__.py +0 -0
  33. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/binance_async.py +0 -0
  34. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/earn_api.py +0 -0
  35. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/etype/ad.py +0 -0
  36. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/etype/pm.py +0 -0
  37. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/ex.py +0 -0
  38. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/exceptions.py +0 -0
  39. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/sapi.py +0 -0
  40. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Binance/web_c2c.py +0 -0
  41. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/__init__.py +0 -0
  42. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/agent.py +0 -0
  43. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/base.py +0 -0
  44. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/etype/ad.py +0 -0
  45. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/etype/pm.py +0 -0
  46. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/ex.py +0 -0
  47. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/req.mjs +0 -0
  48. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BingX/sign.js +0 -0
  49. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BitGet/__init__.py +0 -0
  50. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BitGet/agent.py +0 -0
  51. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BitGet/etype/ad.py +0 -0
  52. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BitGet/ex.py +0 -0
  53. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/BitPapa/ex.py +0 -0
  54. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/InAgent.py +0 -0
  55. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/etype/ad.py +0 -0
  56. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/etype/cred.py +0 -0
  57. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/etype/order.py +0 -0
  58. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/ex.py +0 -0
  59. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/order.py +0 -0
  60. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/web_earn.py +0 -0
  61. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/web_p2p.py +0 -0
  62. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Bybit/ws.py +0 -0
  63. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Gate/etype/ad.py +0 -0
  64. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Gate/ex.py +0 -0
  65. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Gate/premarket.py +0 -0
  66. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Gmail/__init__.py +0 -0
  67. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/agent.py +0 -0
  68. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/earn.py +0 -0
  69. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/etype/__init__.py +0 -0
  70. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/etype/ad.py +0 -0
  71. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/etype/cred.py +0 -0
  72. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/etype/pm.py +0 -0
  73. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/etype/test.py +0 -0
  74. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Htx/ex.py +0 -0
  75. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/KuCoin/etype/ad.py +0 -0
  76. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/KuCoin/etype/pm.py +0 -0
  77. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/KuCoin/ex.py +0 -0
  78. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/KuCoin/web.py +0 -0
  79. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Mexc/etype/ad.py +0 -0
  80. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Mexc/etype/pm.py +0 -0
  81. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Mexc/ex.py +0 -0
  82. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Okx/etype/ad.py +0 -0
  83. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Okx/etype/pm.py +0 -0
  84. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Okx/ex.py +0 -0
  85. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/.gitignore +0 -0
  86. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Alfa/__init__.py +0 -0
  87. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Alfa/state.json +0 -0
  88. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Ozon/__init__.py +0 -0
  89. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Sber/__init__.py +0 -0
  90. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Tinkoff/__init__.py +0 -0
  91. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Tinkoff/state.json +0 -0
  92. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Volet/__init__.py +0 -0
  93. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
  94. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
  95. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Volet/api.py +0 -0
  96. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/Pms/Volet/pl.py +0 -0
  97. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/agent.py +0 -0
  98. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/asset.py +0 -0
  99. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/auth.py +0 -0
  100. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/ex.py +0 -0
  101. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/inAgent.py +0 -0
  102. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/order.py +0 -0
  103. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/pyd.py +0 -0
  104. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/pyro.py +0 -0
  105. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/TgWallet/web.py +0 -0
  106. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/__init__.py +0 -0
  107. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/loader.py +0 -0
  108. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client/pm_unifier.py +0 -0
  109. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client.egg-info/SOURCES.txt +0 -0
  110. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client.egg-info/dependency_links.txt +0 -0
  111. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/xync_client.egg-info/requires.txt +0 -0
  112. {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev13}/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.57.dev12
3
+ Version: 0.0.57.dev13
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
@@ -12,6 +12,7 @@ from asyncpg import ConnectionDoesNotExistError
12
12
  from bybit_p2p import P2P
13
13
  from bybit_p2p._exceptions import FailedRequestError
14
14
  from pyro_client.client.file import FileClient
15
+ from tortoise.exceptions import IntegrityError
15
16
  from tortoise.expressions import F, Q
16
17
  from urllib3.exceptions import ReadTimeoutError
17
18
  from x_model import init_db
@@ -408,6 +409,7 @@ class AgentClient(BaseAgentClient): # Bybit client
408
409
  for oid, o in ords.items():
409
410
  fo = self.api.get_order_details(orderId=oid)
410
411
  order = OrderFull.model_validate(fo["result"])
412
+ await sleep(0.5)
411
413
  ad = Ad(**self.api.get_ad_details(itemId=order.itemId)["result"])
412
414
  maker_name = o.buyerRealName, o.sellerRealName # ad.side
413
415
  im_maker = order.makerUserId == o.userId
@@ -418,7 +420,16 @@ class AgentClient(BaseAgentClient): # Bybit client
418
420
  ...
419
421
  if (cred := order.confirmedPayTerm).paymentType:
420
422
  if not (credex := await models.CredEx.get_or_none(exid=cred.id, ex=self.ex_client.ex)):
421
- pmcur = await Pmcur.get(pm__pmexs__exid=cred.paymentType, cur__ticker=ad.currencyId)
423
+ if (
424
+ await Pmcur.filter(
425
+ pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=cred.paymentType, cur__ticker=ad.currencyId
426
+ ).count()
427
+ != 1
428
+ ):
429
+ ...
430
+ pmcur = await Pmcur.get(
431
+ pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=cred.paymentType, cur__ticker=ad.currencyId
432
+ )
422
433
  if not (
423
434
  crd := await models.Cred.get_or_none(
424
435
  pmcur=pmcur, person=ad_db.maker.person, detail=cred.accountNo
@@ -434,9 +445,12 @@ class AgentClient(BaseAgentClient): # Bybit client
434
445
  )
435
446
  credex = await models.CredEx.create(exid=cred.id, ex=self.ex_client.ex, cred=crd)
436
447
  taker_person, _ = await Person.get_or_create(name=maker_name[::-1][ad.side])
437
- taker, _ = await Actor.get_or_create(
438
- {"name": taker_nick}, person=taker_person, ex=self.ex_client.ex, exid=taker_id
439
- )
448
+ try:
449
+ taker, _ = await Actor.get_or_create(
450
+ {"name": taker_nick, "person": taker_person}, ex=self.ex_client.ex, exid=taker_id
451
+ )
452
+ except IntegrityError as e:
453
+ logging.error(e)
440
454
  order_db, _ = await models.Order.update_or_create(
441
455
  {
442
456
  "amount": o.amount,
@@ -523,7 +537,7 @@ class AgentClient(BaseAgentClient): # Bybit client
523
537
  ):
524
538
  k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
525
539
 
526
- creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex)
540
+ creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex, curex.cur)
527
541
  if not volume:
528
542
  if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
529
543
  # todo: we using the only one fiat exactly from THE FIRST cred
@@ -612,7 +626,7 @@ class AgentClient(BaseAgentClient): # Bybit client
612
626
  k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
613
627
 
614
628
  if pms:
615
- creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex)
629
+ creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex, curex.cur)
616
630
  [str(p.exid) for p in creds.values()]
617
631
 
618
632
  if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
@@ -673,7 +687,11 @@ class AgentClient(BaseAgentClient): # Bybit client
673
687
  # если точно такое условие уже есть в бд, ниче делать не надо
674
688
  if not (cleaned := clean(ad.remark)) or (cid := {oc[0]: ci for ci, oc in self.all_conds.items()}.get(cleaned)):
675
689
  if force:
676
- return await models.Ad.get_or_none(exid=ad.id) or await self.ad_create(ad, cid, rname, dr), False
690
+ return (
691
+ await models.Ad.get_or_none(exid=ad.id).prefetch_related("maker__person")
692
+ or await self.ad_create(ad, cid, rname, dr),
693
+ False,
694
+ )
677
695
  return None, False
678
696
  # если эта объява уже есть в бд
679
697
  if ad_db := await models.Ad.get_or_none(exid=ad.id).prefetch_related("cond__ads__maker", "maker__person"):
@@ -723,14 +741,11 @@ class AgentClient(BaseAgentClient): # Bybit client
723
741
 
724
742
  new_cond = await Cond.create(raw_txt=cleaned)
725
743
  self.all_conds[new_cond.id] = new_cond.raw_txt, {ad.userId}
726
- ad_db = await self.ad_create(ad, new_cond.id)
727
-
728
744
  # если нашелся похожий текст у другого юзера, добавим связь с % похожести
729
745
  if sim:
730
746
  await self.sim_new(new_cond.id, sim, old_cid)
731
747
 
732
- await ad_db.fetch_related("cond", "maker__person")
733
- return ad_db, True
748
+ return await self.ad_create(ad, new_cond.id), True
734
749
 
735
750
  async def ad_create(self, ad: Ad, cid: int, rname: str = None, dr: Direction = None) -> models.Ad:
736
751
  act_df = {}
@@ -739,7 +754,7 @@ class AgentClient(BaseAgentClient): # Bybit client
739
754
  if rname:
740
755
  act_df |= {"person": (await Person.get_or_create(name=rname))[0]}
741
756
  actor, _ = await Actor.update_or_create(act_df, exid=ad.userId, ex=self.ex_client.ex)
742
- return await models.Ad.create(
757
+ ad_db = await models.Ad.create(
743
758
  price=ad.price,
744
759
  amount=float(ad.quantity) * float(ad.price),
745
760
  min_fiat=ad.minAmount,
@@ -755,6 +770,8 @@ class AgentClient(BaseAgentClient): # Bybit client
755
770
  ),
756
771
  maker=actor,
757
772
  )
773
+ await ad_db.fetch_related("cond", "maker__person")
774
+ return ad_db
758
775
 
759
776
  async def sim_new(self, new_cid: int, sim: int, old_cid: int):
760
777
  if not sim:
@@ -830,9 +847,12 @@ def listen(data: dict):
830
847
  print(data)
831
848
 
832
849
 
833
- async def get_creds(norms: list[str], ex: models.Ex) -> dict[models.Pmex, models.CredEx]:
850
+ async def get_creds(norms: list[str], ex: models.Ex, cur: Cur) -> dict[models.Pmex, models.CredEx]:
834
851
  return {
835
- await models.Pmex.get(ex=ex, pm__norm=n): await models.CredEx.get(ex=ex, cred__pmcur__pm__norm=n) for n in norms
852
+ await models.Pmex.get(ex=ex, pm__norm=n): await models.CredEx.get(
853
+ ex=ex, cred__pmcur__pm__norm=n, pmcur__cur=cur
854
+ )
855
+ for n in norms
836
856
  }
837
857
 
838
858
 
@@ -867,7 +887,7 @@ async def main():
867
887
  for c in await Cond.all().prefetch_related("ads__maker")
868
888
  }
869
889
  # await cl.set_creds()
870
- await cl.get_api_orders(2)
890
+ await cl.get_api_orders(16)
871
891
  # await cl.actual_cond()
872
892
  await gather(
873
893
  cl.battle(usdt, rub, False, ["volet"], 79.97), # гонка в стакане покупки - мы продаем
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.57.dev12
3
+ Version: 0.0.57.dev13
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