xync-client 0.0.57.dev15__tar.gz → 0.0.57.dev19__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.dev15/xync_client.egg-info → xync_client-0.0.57.dev19}/PKG-INFO +1 -1
  2. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/pyproject.toml +1 -1
  3. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/agent.py +42 -31
  4. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/etype/order.py +2 -2
  5. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19/xync_client.egg-info}/PKG-INFO +1 -1
  6. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/.env.sample +0 -0
  7. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/.gitignore +0 -0
  8. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/.pre-commit-config.yaml +0 -0
  9. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/README.md +0 -0
  10. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/makefile +0 -0
  11. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/setup.cfg +0 -0
  12. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/TestAgent.py +0 -0
  13. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/TestAsset.py +0 -0
  14. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/TestEx.py +0 -0
  15. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/TestOrder.py +0 -0
  16. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Binance/test_binance.py +0 -0
  17. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  18. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  19. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Gate/test_gate.py +0 -0
  20. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  21. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  22. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  23. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/__init__.py +0 -0
  24. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/tests/_todo_refact/_test_ex.py +0 -0
  25. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/Agent.py +0 -0
  26. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/Asset.py +0 -0
  27. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/Auth.py +0 -0
  28. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/BaseTest.py +0 -0
  29. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/Ex.py +0 -0
  30. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/InAgent.py +0 -0
  31. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/Order.py +0 -0
  32. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Abc/xtype.py +0 -0
  33. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/__init__.py +0 -0
  34. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/binance_async.py +0 -0
  35. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/earn_api.py +0 -0
  36. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/etype/ad.py +0 -0
  37. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/etype/pm.py +0 -0
  38. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/ex.py +0 -0
  39. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/exceptions.py +0 -0
  40. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/sapi.py +0 -0
  41. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Binance/web_c2c.py +0 -0
  42. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/__init__.py +0 -0
  43. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/agent.py +0 -0
  44. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/base.py +0 -0
  45. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/etype/ad.py +0 -0
  46. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/etype/pm.py +0 -0
  47. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/ex.py +0 -0
  48. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/req.mjs +0 -0
  49. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BingX/sign.js +0 -0
  50. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BitGet/__init__.py +0 -0
  51. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BitGet/agent.py +0 -0
  52. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BitGet/etype/ad.py +0 -0
  53. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BitGet/ex.py +0 -0
  54. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/BitPapa/ex.py +0 -0
  55. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/InAgent.py +0 -0
  56. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/etype/ad.py +0 -0
  57. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/etype/cred.py +0 -0
  58. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/ex.py +0 -0
  59. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/order.py +0 -0
  60. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/web_earn.py +0 -0
  61. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/web_p2p.py +0 -0
  62. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Bybit/ws.py +0 -0
  63. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Gate/etype/ad.py +0 -0
  64. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Gate/ex.py +0 -0
  65. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Gate/premarket.py +0 -0
  66. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Gmail/__init__.py +0 -0
  67. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/agent.py +0 -0
  68. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/earn.py +0 -0
  69. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/etype/__init__.py +0 -0
  70. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/etype/ad.py +0 -0
  71. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/etype/cred.py +0 -0
  72. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/etype/pm.py +0 -0
  73. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/etype/test.py +0 -0
  74. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Htx/ex.py +0 -0
  75. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/KuCoin/etype/ad.py +0 -0
  76. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/KuCoin/etype/pm.py +0 -0
  77. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/KuCoin/ex.py +0 -0
  78. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/KuCoin/web.py +0 -0
  79. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Mexc/etype/ad.py +0 -0
  80. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Mexc/etype/pm.py +0 -0
  81. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Mexc/ex.py +0 -0
  82. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Okx/etype/ad.py +0 -0
  83. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Okx/etype/pm.py +0 -0
  84. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Okx/ex.py +0 -0
  85. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/.gitignore +0 -0
  86. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Alfa/__init__.py +0 -0
  87. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Alfa/state.json +0 -0
  88. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Ozon/__init__.py +0 -0
  89. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Sber/__init__.py +0 -0
  90. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Tinkoff/__init__.py +0 -0
  91. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Tinkoff/state.json +0 -0
  92. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Volet/__init__.py +0 -0
  93. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
  94. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
  95. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Volet/api.py +0 -0
  96. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/Pms/Volet/pl.py +0 -0
  97. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/agent.py +0 -0
  98. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/asset.py +0 -0
  99. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/auth.py +0 -0
  100. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/ex.py +0 -0
  101. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/inAgent.py +0 -0
  102. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/order.py +0 -0
  103. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/pyd.py +0 -0
  104. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/pyro.py +0 -0
  105. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/TgWallet/web.py +0 -0
  106. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/__init__.py +0 -0
  107. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/loader.py +0 -0
  108. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client/pm_unifier.py +0 -0
  109. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client.egg-info/SOURCES.txt +0 -0
  110. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client.egg-info/dependency_links.txt +0 -0
  111. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/xync_client.egg-info/requires.txt +0 -0
  112. {xync_client-0.0.57.dev15 → xync_client-0.0.57.dev19}/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.dev15
3
+ Version: 0.0.57.dev19
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
@@ -43,7 +43,7 @@ Repository = "https://gitlab.com/XyncNet/client"
43
43
  packages = ["xync_client"]
44
44
 
45
45
  [build-system]
46
- requires = ["setuptools>=72", "setuptools-scm[toml]>=8"]
46
+ requires = ["setuptools<81", "setuptools-scm[toml]>=8"]
47
47
  build-backend = "setuptools.build_meta"
48
48
  [tool.setuptools_scm]
49
49
  version_scheme = "python-simplified-semver" # if "feature" in `branch_name` SEMVER_MINOR++ else SEMVER_PATCH++
@@ -19,7 +19,7 @@ from x_model import init_db
19
19
  from xync_schema import models
20
20
  from xync_schema.enums import OrderStatus
21
21
 
22
- from xync_schema.models import Cur, Actor, Cond, Direction, CondSim, Person, Pmcur
22
+ from xync_schema.models import Actor, Cond, Direction, CondSim, Pmcur
23
23
 
24
24
  from xync_client.Abc.Agent import BaseAgentClient
25
25
  from xync_client.Abc.xtype import BaseOrderReq, FlatDict
@@ -89,14 +89,14 @@ class AgentClient(BaseAgentClient): # Bybit client
89
89
 
90
90
  """ Private METHs"""
91
91
 
92
- def fiat_new(self, payment_type: int, real_name: str, account_number: str) -> FlatDict:
93
- method1 = self._post(
92
+ async def fiat_new(self, payment_type: int, real_name: str, account_number: str) -> FlatDict | None:
93
+ method1 = await self._post(
94
94
  "/fiat/otc/user/payment/new_create",
95
95
  {"paymentType": payment_type, "realName": real_name, "accountNo": account_number, "securityRiskToken": ""},
96
96
  )
97
97
  if srt := method1["result"]["securityRiskToken"]:
98
- self._check_2fa(srt)
99
- method2 = self._post(
98
+ await self._check_2fa(srt)
99
+ method2 = await self._post(
100
100
  "/fiat/otc/user/payment/new_create",
101
101
  {
102
102
  "paymentType": payment_type,
@@ -107,20 +107,20 @@ class AgentClient(BaseAgentClient): # Bybit client
107
107
  )
108
108
  return method2
109
109
  else:
110
- print(method1)
110
+ return logging.exception(method1)
111
111
 
112
- def get_payment_method(self, fiat_id: int = None) -> dict:
113
- list_methods = self.get_user_pay_methods()
112
+ async def get_payment_method(self, fiat_id: int = None) -> dict:
113
+ list_methods = self.creds()
114
114
  if fiat_id:
115
115
  fiat = [m for m in list_methods if m["id"] == fiat_id][0]
116
116
  return fiat
117
117
  return list_methods[1]
118
118
 
119
- def creds(self) -> list[CredEpyd]:
119
+ def creds(self) -> dict[int, CredEpyd]:
120
120
  data = self.api.get_user_payment_types()
121
121
  if data["ret_code"] > 0:
122
122
  return data
123
- return [CredEpyd.model_validate(credex) for credex in data["result"]]
123
+ return {credex.id: CredEpyd.model_validate(credex) for credex in data["result"]}
124
124
 
125
125
  async def cred_epyd2db(self, ecdx: CredEpyd, pers_id: int = None, cur_id: int = None) -> models.CredEx | None:
126
126
  if ecdx.paymentType in (416,):
@@ -216,10 +216,6 @@ class AgentClient(BaseAgentClient): # Bybit client
216
216
  ads = [ad for ad in list_ads if set(ad["payments"]) - {"5", "51"}]
217
217
  return float(ads[0]["price"])
218
218
 
219
- async def my_fiats(self, cur: Cur = None):
220
- upm = await self._post("/fiat/otc/user/payment/list")
221
- return upm["result"]
222
-
223
219
  def get_user_ads(self, active: bool = True) -> list:
224
220
  uo = self._post("/fiat/otc/item/personal/list", {"page": "1", "size": "10", "status": "2" if active else "0"})
225
221
  return uo["result"]["items"]
@@ -405,18 +401,26 @@ class AgentClient(BaseAgentClient): # Bybit client
405
401
  )
406
402
  except FailedRequestError as e:
407
403
  if e.status_code == 10000:
408
- await sleep(1, await self.get_api_orders(page, begin_time, end_time, status, side, token_id))
404
+ await sleep(9)
405
+ await self.get_api_orders(page, begin_time, end_time, status, side, token_id)
409
406
  ords = {int(o["id"]): OrderItem.model_validate(o) for o in lst["result"]["items"]}
410
407
  for oid, o in ords.items():
411
408
  fo = self.api.get_order_details(orderId=oid)
412
409
  order = OrderFull.model_validate(fo["result"])
413
- await sleep(0.5)
410
+ await sleep(1)
414
411
  ad = Ad(**self.api.get_ad_details(itemId=order.itemId)["result"])
412
+ await sleep(1)
415
413
  maker_name = o.buyerRealName, o.sellerRealName
416
- seller_person, _ = await Person.get_or_create(name=o.sellerRealName)
417
- im_maker = order.makerUserId == o.userId
418
- taker_id = (o.userId, o.targetUserId)[int(im_maker)]
419
- taker_nick = (self.actor.name, o.targetNickName)[int(im_maker)]
414
+ im_maker = int(order.makerUserId == o.userId)
415
+ taker_id = (o.userId, o.targetUserId)[im_maker]
416
+ taker_person = await self.person_upsert(maker_name[::-1][ad.side], taker_id)
417
+ im_seller = o.side == im_maker
418
+ if not im_maker:
419
+ ...
420
+ seller_person = (
421
+ self.actor.person if im_seller else await self.person_upsert(o.sellerRealName, int(o.targetUserId))
422
+ )
423
+ taker_nick = (self.actor.name, o.targetNickName)[im_maker] # todo: check
420
424
  ad_db, cond_isnew = await self.cond_upsert(ad, maker_name[ad.side], force=True)
421
425
  if not ad_db:
422
426
  ...
@@ -457,7 +461,6 @@ class AgentClient(BaseAgentClient): # Bybit client
457
461
  extra=extr,
458
462
  )
459
463
  credex = await models.CredEx.create(exid=ecredex.id, ex=self.ex_client.ex, cred=crd)
460
- taker_person, _ = await Person.get_or_create(name=maker_name[::-1][ad.side])
461
464
  try:
462
465
  taker, _ = await Actor.get_or_create(
463
466
  {"name": taker_nick, "person": taker_person}, ex=self.ex_client.ex, exid=taker_id
@@ -469,9 +472,9 @@ class AgentClient(BaseAgentClient): # Bybit client
469
472
  "amount": o.amount,
470
473
  "status": OrderStatus[Statuses(o.status).name],
471
474
  "created_at": int(o.createDate[:-3]),
472
- "payed_at": order.transferDate != "0" and int(order.transferDate[:-3]),
473
- "confirmed_at": Statuses(o.status) == Statuses.completed and int(order.updateDate[:-3]),
474
- "appealed_at": o.status == 30 and int(order.updateDate[:-3]),
475
+ "payed_at": order.transferDate != "0" and int(order.transferDate[:-3]) or None,
476
+ "confirmed_at": Statuses(o.status) == Statuses.completed and int(order.updateDate[:-3]) or None,
477
+ "appealed_at": o.status == 30 and int(order.updateDate[:-3]) or None,
475
478
  "cred_id": ecredex.paymentType and credex.cred_id or None,
476
479
  "taker": taker,
477
480
  },
@@ -479,9 +482,9 @@ class AgentClient(BaseAgentClient): # Bybit client
479
482
  ad=ad_db,
480
483
  )
481
484
  dmsgs = self.api.get_chat_messages(orderId=oid, size=200)["result"]["result"][::-1]
482
- if ad.remark != dmsgs.pop(0)["message"]:
483
- logging.exception(ad.remark)
484
485
  msgs = [Message.model_validate(m) for m in dmsgs if m["msgType"] in (1, 2, 7, 8)]
486
+ if ad.remark:
487
+ msgs.pop(0)
485
488
  msgs_db = [
486
489
  models.Msg(
487
490
  order=order_db,
@@ -611,7 +614,7 @@ class AgentClient(BaseAgentClient): # Bybit client
611
614
  _res = self.ad_upd(req)
612
615
  else:
613
616
  raise e
614
- elif ExcCode(e.status_code) == ExcCode.InsufficientAmount:
617
+ elif ExcCode(e.status_code) == ExcCode.InsufficientBalance:
615
618
  asset = await models.Asset.get(addr__actor=self.actor, addr__coin_id=coinex.coin_id)
616
619
  req.quantity = round(asset.free - (asset.freeze or 0) - (asset.lock or 0), coinex.coin.scale)
617
620
  _res = self.ad_upd(req)
@@ -750,7 +753,7 @@ class AgentClient(BaseAgentClient): # Bybit client
750
753
  await old_ad.fetch_related("cond")
751
754
  return old_ad, False
752
755
  # но это не она, значит у него есть другая объява с похожим, но чуть отличающимся текстом
753
- logging.warning(f"ad#{ad.id}-cond#{old_cid} txt updated:\n{txt}\n|\n|\nV\n{cleaned}")
756
+ logging.warning(f"ad#{ad.id}-cond#{old_cid} txt updated:\n{txt}\n|\nV\n{cleaned}")
754
757
 
755
758
  new_cond = await Cond.create(raw_txt=cleaned)
756
759
  self.all_conds[new_cond.id] = new_cond.raw_txt, {ad.userId}
@@ -760,12 +763,20 @@ class AgentClient(BaseAgentClient): # Bybit client
760
763
 
761
764
  return await self.ad_create(ad, new_cond.id), True
762
765
 
766
+ async def person_upsert(self, name: str, exid: int) -> models.Person:
767
+ if actor := await models.Actor.get_or_none(exid=exid, ex=self.ex_client.ex).prefetch_related("person"):
768
+ if not actor.person:
769
+ actor.person = await models.Person.create(name=name)
770
+ await actor.save()
771
+ return actor.person
772
+ return await models.Person.create(name=name)
773
+
763
774
  async def ad_create(self, ad: Ad, cid: int, rname: str = None, dr: Direction = None) -> models.Ad:
764
775
  act_df = {}
765
776
  if int(ad.userId) != self.actor.exid:
766
777
  act_df |= {"name": ad.nickName}
767
778
  if rname:
768
- act_df |= {"person": (await Person.get_or_create(name=rname))[0]}
779
+ act_df |= {"person": await self.person_upsert(rname, int(ad.userId))}
769
780
  actor, _ = await Actor.update_or_create(act_df, exid=ad.userId, ex=self.ex_client.ex)
770
781
  ad_db = await models.Ad.create(
771
782
  price=ad.price,
@@ -877,7 +888,7 @@ def listen(data: dict):
877
888
  class ExcCode(IntEnum):
878
889
  FixPriceLimit = 912120022
879
890
  RareLimit = 912120050
880
- InsufficientAmount = 912120024
891
+ InsufficientBalance = 912120024
881
892
  Timestamp = 10002
882
893
  IP = 10010
883
894
  Quantity = 912300019
@@ -918,7 +929,7 @@ async def main():
918
929
  cl.battle(usdc, rub, True, ["volet"], 79),
919
930
  cl.take(usdt, rub, False, ceil=80.5, volume=360),
920
931
  cl.take(usdt, rub, True, ceil=80.5, volume=360),
921
- cl.get_api_orders(1),
932
+ cl.get_api_orders(48),
922
933
  )
923
934
 
924
935
  bor = BaseOrderReq(
@@ -154,7 +154,7 @@ class OrderItem(BaseModel):
154
154
  notifyTokenId: str
155
155
  fee: str
156
156
  targetNickName: str
157
- targetUserId: str
157
+ targetUserId: str # не я
158
158
  status: Literal[
159
159
  5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110
160
160
  ] # 5: waiting for chain (only web3), 10: waiting for buyer to pay, 20: waiting for seller to release, 30: appealing, 40: order cancelled, 50: order finished, 60: paying (only when paying online), 70: pay fail (only when paying online), 80: exception cancelled (the coin convert to other coin, only hotswap), 90: waiting for buyer to select tokenId, 100: objectioning, 110: waiting for the user to raise an objection
@@ -162,7 +162,7 @@ class OrderItem(BaseModel):
162
162
  createDate: str
163
163
  transferLastSeconds: str
164
164
  appealLastSeconds: str
165
- userId: str
165
+ userId: str # я
166
166
  sellerRealName: str
167
167
  buyerRealName: str
168
168
  judgeInfo: JudgeInfo
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.57.dev15
3
+ Version: 0.0.57.dev19
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