xync-client 0.0.57.dev13__tar.gz → 0.0.57.dev14__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.dev13/xync_client.egg-info → xync_client-0.0.57.dev14}/PKG-INFO +1 -1
  2. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/agent.py +78 -59
  3. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/cred.py +6 -6
  4. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/order.py +5 -3
  5. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14/xync_client.egg-info}/PKG-INFO +1 -1
  6. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/.env.sample +0 -0
  7. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/.gitignore +0 -0
  8. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/.pre-commit-config.yaml +0 -0
  9. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/README.md +0 -0
  10. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/makefile +0 -0
  11. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/pyproject.toml +0 -0
  12. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/setup.cfg +0 -0
  13. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/TestAgent.py +0 -0
  14. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/TestAsset.py +0 -0
  15. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/TestEx.py +0 -0
  16. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/TestOrder.py +0 -0
  17. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Binance/test_binance.py +0 -0
  18. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  19. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  20. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Gate/test_gate.py +0 -0
  21. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  22. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  23. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  24. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/__init__.py +0 -0
  25. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/tests/_todo_refact/_test_ex.py +0 -0
  26. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/Agent.py +0 -0
  27. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/Asset.py +0 -0
  28. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/Auth.py +0 -0
  29. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/BaseTest.py +0 -0
  30. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/Ex.py +0 -0
  31. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/InAgent.py +0 -0
  32. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/Order.py +0 -0
  33. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Abc/xtype.py +0 -0
  34. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/__init__.py +0 -0
  35. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/binance_async.py +0 -0
  36. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/earn_api.py +0 -0
  37. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/etype/ad.py +0 -0
  38. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/etype/pm.py +0 -0
  39. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/ex.py +0 -0
  40. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/exceptions.py +0 -0
  41. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/sapi.py +0 -0
  42. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Binance/web_c2c.py +0 -0
  43. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/__init__.py +0 -0
  44. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/agent.py +0 -0
  45. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/base.py +0 -0
  46. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/etype/ad.py +0 -0
  47. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/etype/pm.py +0 -0
  48. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/ex.py +0 -0
  49. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/req.mjs +0 -0
  50. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BingX/sign.js +0 -0
  51. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BitGet/__init__.py +0 -0
  52. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BitGet/agent.py +0 -0
  53. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BitGet/etype/ad.py +0 -0
  54. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BitGet/ex.py +0 -0
  55. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/BitPapa/ex.py +0 -0
  56. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/InAgent.py +0 -0
  57. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/ad.py +0 -0
  58. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/ex.py +0 -0
  59. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/order.py +0 -0
  60. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/web_earn.py +0 -0
  61. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/web_p2p.py +0 -0
  62. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Bybit/ws.py +0 -0
  63. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Gate/etype/ad.py +0 -0
  64. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Gate/ex.py +0 -0
  65. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Gate/premarket.py +0 -0
  66. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Gmail/__init__.py +0 -0
  67. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/agent.py +0 -0
  68. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/earn.py +0 -0
  69. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/__init__.py +0 -0
  70. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/ad.py +0 -0
  71. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/cred.py +0 -0
  72. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/pm.py +0 -0
  73. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/test.py +0 -0
  74. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Htx/ex.py +0 -0
  75. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/KuCoin/etype/ad.py +0 -0
  76. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/KuCoin/etype/pm.py +0 -0
  77. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/KuCoin/ex.py +0 -0
  78. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/KuCoin/web.py +0 -0
  79. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Mexc/etype/ad.py +0 -0
  80. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Mexc/etype/pm.py +0 -0
  81. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Mexc/ex.py +0 -0
  82. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Okx/etype/ad.py +0 -0
  83. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Okx/etype/pm.py +0 -0
  84. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Okx/ex.py +0 -0
  85. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/.gitignore +0 -0
  86. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Alfa/__init__.py +0 -0
  87. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Alfa/state.json +0 -0
  88. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Ozon/__init__.py +0 -0
  89. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Sber/__init__.py +0 -0
  90. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Tinkoff/__init__.py +0 -0
  91. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Tinkoff/state.json +0 -0
  92. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/__init__.py +0 -0
  93. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
  94. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
  95. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/api.py +0 -0
  96. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/pl.py +0 -0
  97. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/agent.py +0 -0
  98. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/asset.py +0 -0
  99. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/auth.py +0 -0
  100. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/ex.py +0 -0
  101. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/inAgent.py +0 -0
  102. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/order.py +0 -0
  103. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/pyd.py +0 -0
  104. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/pyro.py +0 -0
  105. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/TgWallet/web.py +0 -0
  106. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/__init__.py +0 -0
  107. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/loader.py +0 -0
  108. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client/pm_unifier.py +0 -0
  109. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client.egg-info/SOURCES.txt +0 -0
  110. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client.egg-info/dependency_links.txt +0 -0
  111. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/xync_client.egg-info/requires.txt +0 -0
  112. {xync_client-0.0.57.dev13 → xync_client-0.0.57.dev14}/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.dev13
3
+ Version: 0.0.57.dev14
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,7 +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
+ from tortoise.exceptions import IntegrityError, MultipleObjectsReturned
16
16
  from tortoise.expressions import F, Q
17
17
  from urllib3.exceptions import ReadTimeoutError
18
18
  from x_model import init_db
@@ -122,41 +122,42 @@ class AgentClient(BaseAgentClient): # Bybit client
122
122
  return data
123
123
  return [CredEpyd.model_validate(credex) for credex in data["result"]]
124
124
 
125
- async def cred_epyd2db(self, cred: CredEpyd) -> models.CredEx:
126
- if cred.paymentType not in (416,):
127
- if not (
128
- pmex := await models.Pmex.get_or_none(exid=cred.paymentType, ex=self.ex_client.ex).prefetch_related(
129
- "pm__curs"
130
- )
131
- ):
132
- raise HTTPException(f"No Pmex {cred.paymentType} on ex#{self.ex_client.ex.name}", 404)
133
- if cred_old := await models.Cred.get_or_none(
134
- credexs__exid=cred.id, credexs__ex=self.actor.ex
135
- ).prefetch_related("pmcur"):
136
- cur_id = cred_old.pmcur.cur_id
137
- else: # is new Cred
138
- cur_id = (
139
- pmex.pm.df_cur_id
140
- or (pmex.pm.country_id and await pmex.pm.country.cur_id)
141
- or (cred.currencyBalance and await models.Cur.get_or_none(ticker=cred.currencyBalance[0]))
142
- or (0 < len(pmex.pm.curs) < 20 and pmex.pm.curs[-1].id)
143
- )
144
- if not cur_id:
145
- raise Exception(f"Set default cur for {pmex.name}")
146
- if not (pmcur := await models.Pmcur.get_or_none(cur_id=cur_id, pm_id=pmex.pm_id)):
147
- raise HTTPException(f"No Pmcur with cur#{cred.currencyBalance} and pm#{cred.paymentType}", 404)
148
- dct = {
149
- "pmcur_id": pmcur.id,
150
- "name": cred.paymentConfigVo.paymentName,
151
- "person_id": self.actor.person_id,
152
- "detail": cred.accountNo,
153
- "extra": cred.branchName or cred.bankName,
154
- } # todo: WTD with multicur pms?
155
- cred_in = models.Cred.validate(dct, False)
156
- cred_db, _ = await models.Cred.update_or_create(**cred_in.df_unq())
157
- credex_in = models.CredEx.validate({"exid": cred.id, "cred_id": cred_db.id, "ex_id": self.actor.ex.id})
158
- credex_db, _ = await models.CredEx.update_or_create(**credex_in.df_unq())
159
- return credex_db
125
+ async def cred_epyd2db(self, ecdx: CredEpyd, pers_id: int = None, cur_id: int = None) -> models.CredEx | None:
126
+ if ecdx.paymentType in (416,):
127
+ return None
128
+ if not (
129
+ pmex := await models.Pmex.get_or_none(exid=ecdx.paymentType, ex=self.ex_client.ex).prefetch_related(
130
+ "pm__curs"
131
+ )
132
+ ):
133
+ raise HTTPException(f"No Pmex {ecdx.paymentType} on ex#{self.ex_client.ex.name}", 404)
134
+ if cred_old := await models.Cred.get_or_none(credexs__exid=ecdx.id, credexs__ex=self.actor.ex).prefetch_related(
135
+ "pmcur"
136
+ ):
137
+ cur_id = cred_old.pmcur.cur_id
138
+ elif not cur_id: # is new Cred
139
+ cur_id = (
140
+ pmex.pm.df_cur_id
141
+ or (pmex.pm.country_id and await pmex.pm.country.cur_id)
142
+ or (ecdx.currencyBalance and await models.Cur.get_or_none(ticker=ecdx.currencyBalance[0]))
143
+ or (0 < len(pmex.pm.curs) < 20 and pmex.pm.curs[-1].id)
144
+ )
145
+ if not cur_id:
146
+ raise Exception(f"Set default cur for {pmex.name}")
147
+ if not (pmcur := await models.Pmcur.get_or_none(cur_id=cur_id, pm_id=pmex.pm_id)):
148
+ raise HTTPException(f"No Pmcur with cur#{ecdx.currencyBalance} and pm#{ecdx.paymentType}", 404)
149
+ dct = {
150
+ "pmcur_id": pmcur.id,
151
+ "name": ecdx.paymentConfigVo.paymentName,
152
+ "person_id": pers_id or self.actor.person_id,
153
+ "detail": ecdx.accountNo,
154
+ "extra": ecdx.branchName or ecdx.bankName or ecdx.qrcode or ecdx.payMessage or ecdx.paymentExt1,
155
+ } # todo: WTD with multicur pms?
156
+ cred_in = models.Cred.validate(dct, False)
157
+ cred_db, _ = await models.Cred.update_or_create(**cred_in.df_unq())
158
+ credex_in = models.CredEx.validate({"exid": ecdx.id, "cred_id": cred_db.id, "ex_id": self.actor.ex.id})
159
+ credex_db, _ = await models.CredEx.update_or_create(**credex_in.df_unq())
160
+ return credex_db
160
161
 
161
162
  # 25: Список реквизитов моих платежных методов
162
163
  async def set_creds(self) -> list[models.CredEx]:
@@ -411,39 +412,51 @@ class AgentClient(BaseAgentClient): # Bybit client
411
412
  order = OrderFull.model_validate(fo["result"])
412
413
  await sleep(0.5)
413
414
  ad = Ad(**self.api.get_ad_details(itemId=order.itemId)["result"])
414
- maker_name = o.buyerRealName, o.sellerRealName # ad.side
415
+ maker_name = o.buyerRealName, o.sellerRealName
416
+ seller_person, _ = await Person.get_or_create(name=o.sellerRealName)
415
417
  im_maker = order.makerUserId == o.userId
416
418
  taker_id = (o.userId, o.targetUserId)[int(im_maker)]
417
419
  taker_nick = (self.actor.name, o.targetNickName)[int(im_maker)]
418
420
  ad_db, cond_isnew = await self.cond_upsert(ad, maker_name[ad.side], force=True)
419
421
  if not ad_db:
420
422
  ...
421
- if (cred := order.confirmedPayTerm).paymentType:
422
- if not (credex := await models.CredEx.get_or_none(exid=cred.id, ex=self.ex_client.ex)):
423
+ ecredex: CredEpyd = order.confirmedPayTerm
424
+ if ecredex.paymentType:
425
+ if not (credex := await models.CredEx.get_or_none(exid=ecredex.id, ex=self.ex_client.ex)):
426
+ # cur_id = await Cur.get(ticker=ad.currencyId).values_list('id', flat=True)
427
+ # await self.cred_epyd2db(ecredex, ad_db.maker.person_id, cur_id)
423
428
  if (
424
429
  await Pmcur.filter(
425
- pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=cred.paymentType, cur__ticker=ad.currencyId
430
+ pm__pmexs__ex=self.ex_client.ex,
431
+ pm__pmexs__exid=ecredex.paymentType,
432
+ cur__ticker=ad.currencyId,
426
433
  ).count()
427
434
  != 1
428
435
  ):
429
436
  ...
430
437
  pmcur = await Pmcur.get(
431
- pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=cred.paymentType, cur__ticker=ad.currencyId
438
+ pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=ecredex.paymentType, cur__ticker=ad.currencyId
432
439
  )
433
440
  if not (
434
441
  crd := await models.Cred.get_or_none(
435
- pmcur=pmcur, person=ad_db.maker.person, detail=cred.accountNo
442
+ pmcur=pmcur, person=seller_person, detail=ecredex.accountNo
436
443
  )
437
444
  ):
438
- extr = cred.bankName or cred.branchName or cred.qrcode or cred.payMessage or cred.paymentExt1
445
+ extr = (
446
+ ecredex.bankName
447
+ or ecredex.branchName
448
+ or ecredex.qrcode
449
+ or ecredex.payMessage
450
+ or ecredex.paymentExt1
451
+ )
439
452
  crd = await models.Cred.create(
440
- detail=cred.accountNo,
453
+ detail=ecredex.accountNo,
441
454
  pmcur=pmcur,
442
455
  person=ad_db.maker.person,
443
- name=cred.realName,
456
+ name=ecredex.realName,
444
457
  extra=extr,
445
458
  )
446
- credex = await models.CredEx.create(exid=cred.id, ex=self.ex_client.ex, cred=crd)
459
+ credex = await models.CredEx.create(exid=ecredex.id, ex=self.ex_client.ex, cred=crd)
447
460
  taker_person, _ = await Person.get_or_create(name=maker_name[::-1][ad.side])
448
461
  try:
449
462
  taker, _ = await Actor.get_or_create(
@@ -459,7 +472,7 @@ class AgentClient(BaseAgentClient): # Bybit client
459
472
  "payed_at": order.transferDate != "0" and int(order.transferDate[:-3]),
460
473
  "confirmed_at": Statuses(o.status) == Statuses.completed and int(order.updateDate[:-3]),
461
474
  "appealed_at": o.status == 30 and int(order.updateDate[:-3]),
462
- "cred_id": cred.paymentType and credex.cred_id or None,
475
+ "cred_id": ecredex.paymentType and credex.cred_id or None,
463
476
  "taker": taker,
464
477
  },
465
478
  exid=o.id,
@@ -537,7 +550,7 @@ class AgentClient(BaseAgentClient): # Bybit client
537
550
  ):
538
551
  k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
539
552
 
540
- creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex, curex.cur)
553
+ creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
541
554
  if not volume:
542
555
  if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
543
556
  # todo: we using the only one fiat exactly from THE FIRST cred
@@ -626,7 +639,7 @@ class AgentClient(BaseAgentClient): # Bybit client
626
639
  k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
627
640
 
628
641
  if pms:
629
- creds: dict[models.Pmex, models.CredEx] = await get_creds(pms, self.actor.ex, curex.cur)
642
+ creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
630
643
  [str(p.exid) for p in creds.values()]
631
644
 
632
645
  if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
@@ -803,6 +816,20 @@ class AgentClient(BaseAgentClient): # Bybit client
803
816
  ad = Ad(id=str(ad_db.exid), userId=str(ad_db.maker.exid), remark=ad_db.cond.raw_txt)
804
817
  await self.cond_upsert(ad, dr=dr, cid=ad_db.cond_id)
805
818
 
819
+ async def get_credexs_by_norms(self, norms: list[str], cur_id: int) -> dict[models.Pmex, models.CredEx] | None:
820
+ try:
821
+ return {
822
+ await models.Pmex.get(pm__norm=n, ex=self.ex_client.ex): await models.CredEx.get(
823
+ ex=self.ex_client.ex,
824
+ cred__pmcur__pm__norm=n,
825
+ cred__person_id=self.actor.person_id,
826
+ cred__pmcur__cur_id=cur_id,
827
+ )
828
+ for n in norms
829
+ }
830
+ except MultipleObjectsReturned as e:
831
+ logging.exception(e)
832
+
806
833
 
807
834
  def get_sim(s1, s2) -> int:
808
835
  sim = int((SequenceMatcher(None, s1, s2).ratio() - 0.9) * 10_000)
@@ -847,21 +874,13 @@ def listen(data: dict):
847
874
  print(data)
848
875
 
849
876
 
850
- async def get_creds(norms: list[str], ex: models.Ex, cur: Cur) -> dict[models.Pmex, models.CredEx]:
851
- return {
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
856
- }
857
-
858
-
859
877
  class ExcCode(IntEnum):
860
878
  FixPriceLimit = 912120022
861
879
  RareLimit = 912120050
862
880
  InsufficientAmount = 912120024
863
881
  Timestamp = 10002
864
882
  IP = 10010
883
+ Quantity = 912300019
865
884
 
866
885
 
867
886
  async def main():
@@ -887,7 +906,6 @@ async def main():
887
906
  for c in await Cond.all().prefetch_related("ads__maker")
888
907
  }
889
908
  # await cl.set_creds()
890
- await cl.get_api_orders(16)
891
909
  # await cl.actual_cond()
892
910
  await gather(
893
911
  cl.battle(usdt, rub, False, ["volet"], 79.97), # гонка в стакане покупки - мы продаем
@@ -900,6 +918,7 @@ async def main():
900
918
  cl.battle(usdc, rub, True, ["volet"], 79),
901
919
  cl.take(usdt, rub, False, ceil=80.5, volume=360),
902
920
  cl.take(usdt, rub, True, ceil=80.5, volume=360),
921
+ cl.get_api_orders(1),
903
922
  )
904
923
 
905
924
  bor = BaseOrderReq(
@@ -45,7 +45,6 @@ class CredEpyd(CredExOut):
45
45
  businessName: str
46
46
  concept: str
47
47
  online: str
48
- countNo: str
49
48
  paymentExt1: str
50
49
  paymentExt2: str
51
50
  paymentExt3: str
@@ -53,8 +52,9 @@ class CredEpyd(CredExOut):
53
52
  paymentExt5: str
54
53
  paymentExt6: str
55
54
  paymentTemplateVersion: int
56
- hasPaymentTemplateChanged: bool
57
- paymentConfigVo: PaymentConfigVo
58
- realNameVerified: bool
59
- channel: str
60
- currencyBalance: list[str]
55
+ countNo: str = None # only for my cred
56
+ hasPaymentTemplateChanged: bool = None # only for my cred
57
+ paymentConfigVo: PaymentConfigVo # only for my cred
58
+ realNameVerified: bool = None # only for my cred
59
+ channel: str = None # only for my cred
60
+ currencyBalance: list[str] = None # only for my cred
@@ -4,6 +4,8 @@ from typing import Literal
4
4
 
5
5
  from pydantic import BaseModel
6
6
 
7
+ from xync_client.Bybit.etype.cred import CredEpyd
8
+
7
9
 
8
10
  class Statuses(IntEnum):
9
11
  deleted = 40 # order canceled
@@ -183,7 +185,7 @@ class OrderFull(OrderItem):
183
185
  payCode: str
184
186
  paymentType: int
185
187
  transferDate: str
186
- paymentTermList: list[PaymentTerm]
188
+ paymentTermList: list[CredEpyd]
187
189
  remark: str
188
190
  recentOrderNum: int
189
191
  recentExecuteRate: int
@@ -192,8 +194,8 @@ class OrderFull(OrderItem):
192
194
  appealNickName: str
193
195
  canAppeal: str
194
196
  totalAppealTimes: str
195
- paymentTermResult: PaymentTerm
196
- confirmedPayTerm: PaymentTerm
197
+ paymentTermResult: CredEpyd
198
+ confirmedPayTerm: CredEpyd
197
199
  appealedTimes: str
198
200
  orderFinishMinute: int
199
201
  makerFee: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.57.dev13
3
+ Version: 0.0.57.dev14
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