xync-client 0.0.57.dev12__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.
- {xync_client-0.0.57.dev12/xync_client.egg-info → xync_client-0.0.57.dev14}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/agent.py +102 -63
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/cred.py +6 -6
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/order.py +5 -3
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/.env.sample +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/.gitignore +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/README.md +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/makefile +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/pyproject.toml +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/setup.cfg +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/TestAgent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/TestAsset.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/TestEx.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/TestOrder.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/Auth.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/Ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/InAgent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Abc/xtype.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/InAgent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/order.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Bybit/ws.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Gmail/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/.gitignore +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Alfa/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Alfa/state.json +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Ozon/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Sber/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Tinkoff/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Tinkoff/state.json +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/pl.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/__init__.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/loader.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client.egg-info/SOURCES.txt +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -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, MultipleObjectsReturned
|
|
15
16
|
from tortoise.expressions import F, Q
|
|
16
17
|
from urllib3.exceptions import ReadTimeoutError
|
|
17
18
|
from x_model import init_db
|
|
@@ -121,41 +122,42 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
121
122
|
return data
|
|
122
123
|
return [CredEpyd.model_validate(credex) for credex in data["result"]]
|
|
123
124
|
|
|
124
|
-
async def cred_epyd2db(self,
|
|
125
|
-
if
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
|
159
161
|
|
|
160
162
|
# 25: Список реквизитов моих платежных методов
|
|
161
163
|
async def set_creds(self) -> list[models.CredEx]:
|
|
@@ -408,35 +410,60 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
408
410
|
for oid, o in ords.items():
|
|
409
411
|
fo = self.api.get_order_details(orderId=oid)
|
|
410
412
|
order = OrderFull.model_validate(fo["result"])
|
|
413
|
+
await sleep(0.5)
|
|
411
414
|
ad = Ad(**self.api.get_ad_details(itemId=order.itemId)["result"])
|
|
412
|
-
maker_name = o.buyerRealName, o.sellerRealName
|
|
415
|
+
maker_name = o.buyerRealName, o.sellerRealName
|
|
416
|
+
seller_person, _ = await Person.get_or_create(name=o.sellerRealName)
|
|
413
417
|
im_maker = order.makerUserId == o.userId
|
|
414
418
|
taker_id = (o.userId, o.targetUserId)[int(im_maker)]
|
|
415
419
|
taker_nick = (self.actor.name, o.targetNickName)[int(im_maker)]
|
|
416
420
|
ad_db, cond_isnew = await self.cond_upsert(ad, maker_name[ad.side], force=True)
|
|
417
421
|
if not ad_db:
|
|
418
422
|
...
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
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)
|
|
428
|
+
if (
|
|
429
|
+
await Pmcur.filter(
|
|
430
|
+
pm__pmexs__ex=self.ex_client.ex,
|
|
431
|
+
pm__pmexs__exid=ecredex.paymentType,
|
|
432
|
+
cur__ticker=ad.currencyId,
|
|
433
|
+
).count()
|
|
434
|
+
!= 1
|
|
435
|
+
):
|
|
436
|
+
...
|
|
437
|
+
pmcur = await Pmcur.get(
|
|
438
|
+
pm__pmexs__ex=self.ex_client.ex, pm__pmexs__exid=ecredex.paymentType, cur__ticker=ad.currencyId
|
|
439
|
+
)
|
|
422
440
|
if not (
|
|
423
441
|
crd := await models.Cred.get_or_none(
|
|
424
|
-
pmcur=pmcur, person=
|
|
442
|
+
pmcur=pmcur, person=seller_person, detail=ecredex.accountNo
|
|
425
443
|
)
|
|
426
444
|
):
|
|
427
|
-
extr =
|
|
445
|
+
extr = (
|
|
446
|
+
ecredex.bankName
|
|
447
|
+
or ecredex.branchName
|
|
448
|
+
or ecredex.qrcode
|
|
449
|
+
or ecredex.payMessage
|
|
450
|
+
or ecredex.paymentExt1
|
|
451
|
+
)
|
|
428
452
|
crd = await models.Cred.create(
|
|
429
|
-
detail=
|
|
453
|
+
detail=ecredex.accountNo,
|
|
430
454
|
pmcur=pmcur,
|
|
431
455
|
person=ad_db.maker.person,
|
|
432
|
-
name=
|
|
456
|
+
name=ecredex.realName,
|
|
433
457
|
extra=extr,
|
|
434
458
|
)
|
|
435
|
-
credex = await models.CredEx.create(exid=
|
|
459
|
+
credex = await models.CredEx.create(exid=ecredex.id, ex=self.ex_client.ex, cred=crd)
|
|
436
460
|
taker_person, _ = await Person.get_or_create(name=maker_name[::-1][ad.side])
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
461
|
+
try:
|
|
462
|
+
taker, _ = await Actor.get_or_create(
|
|
463
|
+
{"name": taker_nick, "person": taker_person}, ex=self.ex_client.ex, exid=taker_id
|
|
464
|
+
)
|
|
465
|
+
except IntegrityError as e:
|
|
466
|
+
logging.error(e)
|
|
440
467
|
order_db, _ = await models.Order.update_or_create(
|
|
441
468
|
{
|
|
442
469
|
"amount": o.amount,
|
|
@@ -445,7 +472,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
445
472
|
"payed_at": order.transferDate != "0" and int(order.transferDate[:-3]),
|
|
446
473
|
"confirmed_at": Statuses(o.status) == Statuses.completed and int(order.updateDate[:-3]),
|
|
447
474
|
"appealed_at": o.status == 30 and int(order.updateDate[:-3]),
|
|
448
|
-
"cred_id":
|
|
475
|
+
"cred_id": ecredex.paymentType and credex.cred_id or None,
|
|
449
476
|
"taker": taker,
|
|
450
477
|
},
|
|
451
478
|
exid=o.id,
|
|
@@ -523,7 +550,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
523
550
|
):
|
|
524
551
|
k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
|
|
525
552
|
|
|
526
|
-
creds: dict[models.Pmex, models.CredEx] = await
|
|
553
|
+
creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
|
|
527
554
|
if not volume:
|
|
528
555
|
if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
|
|
529
556
|
# todo: we using the only one fiat exactly from THE FIRST cred
|
|
@@ -612,7 +639,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
612
639
|
k = (-1) ** int(is_sell) # on_buy=1, on_sell=-1
|
|
613
640
|
|
|
614
641
|
if pms:
|
|
615
|
-
creds: dict[models.Pmex, models.CredEx] = await
|
|
642
|
+
creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
|
|
616
643
|
[str(p.exid) for p in creds.values()]
|
|
617
644
|
|
|
618
645
|
if is_sell: # гонка в стакане продажи - мы покупаем монету за ФИАТ
|
|
@@ -673,7 +700,11 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
673
700
|
# если точно такое условие уже есть в бд, ниче делать не надо
|
|
674
701
|
if not (cleaned := clean(ad.remark)) or (cid := {oc[0]: ci for ci, oc in self.all_conds.items()}.get(cleaned)):
|
|
675
702
|
if force:
|
|
676
|
-
return
|
|
703
|
+
return (
|
|
704
|
+
await models.Ad.get_or_none(exid=ad.id).prefetch_related("maker__person")
|
|
705
|
+
or await self.ad_create(ad, cid, rname, dr),
|
|
706
|
+
False,
|
|
707
|
+
)
|
|
677
708
|
return None, False
|
|
678
709
|
# если эта объява уже есть в бд
|
|
679
710
|
if ad_db := await models.Ad.get_or_none(exid=ad.id).prefetch_related("cond__ads__maker", "maker__person"):
|
|
@@ -723,14 +754,11 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
723
754
|
|
|
724
755
|
new_cond = await Cond.create(raw_txt=cleaned)
|
|
725
756
|
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
757
|
# если нашелся похожий текст у другого юзера, добавим связь с % похожести
|
|
729
758
|
if sim:
|
|
730
759
|
await self.sim_new(new_cond.id, sim, old_cid)
|
|
731
760
|
|
|
732
|
-
await
|
|
733
|
-
return ad_db, True
|
|
761
|
+
return await self.ad_create(ad, new_cond.id), True
|
|
734
762
|
|
|
735
763
|
async def ad_create(self, ad: Ad, cid: int, rname: str = None, dr: Direction = None) -> models.Ad:
|
|
736
764
|
act_df = {}
|
|
@@ -739,7 +767,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
739
767
|
if rname:
|
|
740
768
|
act_df |= {"person": (await Person.get_or_create(name=rname))[0]}
|
|
741
769
|
actor, _ = await Actor.update_or_create(act_df, exid=ad.userId, ex=self.ex_client.ex)
|
|
742
|
-
|
|
770
|
+
ad_db = await models.Ad.create(
|
|
743
771
|
price=ad.price,
|
|
744
772
|
amount=float(ad.quantity) * float(ad.price),
|
|
745
773
|
min_fiat=ad.minAmount,
|
|
@@ -755,6 +783,8 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
755
783
|
),
|
|
756
784
|
maker=actor,
|
|
757
785
|
)
|
|
786
|
+
await ad_db.fetch_related("cond", "maker__person")
|
|
787
|
+
return ad_db
|
|
758
788
|
|
|
759
789
|
async def sim_new(self, new_cid: int, sim: int, old_cid: int):
|
|
760
790
|
if not sim:
|
|
@@ -786,6 +816,20 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
786
816
|
ad = Ad(id=str(ad_db.exid), userId=str(ad_db.maker.exid), remark=ad_db.cond.raw_txt)
|
|
787
817
|
await self.cond_upsert(ad, dr=dr, cid=ad_db.cond_id)
|
|
788
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
|
+
|
|
789
833
|
|
|
790
834
|
def get_sim(s1, s2) -> int:
|
|
791
835
|
sim = int((SequenceMatcher(None, s1, s2).ratio() - 0.9) * 10_000)
|
|
@@ -830,18 +874,13 @@ def listen(data: dict):
|
|
|
830
874
|
print(data)
|
|
831
875
|
|
|
832
876
|
|
|
833
|
-
async def get_creds(norms: list[str], ex: models.Ex) -> dict[models.Pmex, models.CredEx]:
|
|
834
|
-
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
|
|
836
|
-
}
|
|
837
|
-
|
|
838
|
-
|
|
839
877
|
class ExcCode(IntEnum):
|
|
840
878
|
FixPriceLimit = 912120022
|
|
841
879
|
RareLimit = 912120050
|
|
842
880
|
InsufficientAmount = 912120024
|
|
843
881
|
Timestamp = 10002
|
|
844
882
|
IP = 10010
|
|
883
|
+
Quantity = 912300019
|
|
845
884
|
|
|
846
885
|
|
|
847
886
|
async def main():
|
|
@@ -867,7 +906,6 @@ async def main():
|
|
|
867
906
|
for c in await Cond.all().prefetch_related("ads__maker")
|
|
868
907
|
}
|
|
869
908
|
# await cl.set_creds()
|
|
870
|
-
await cl.get_api_orders(2)
|
|
871
909
|
# await cl.actual_cond()
|
|
872
910
|
await gather(
|
|
873
911
|
cl.battle(usdt, rub, False, ["volet"], 79.97), # гонка в стакане покупки - мы продаем
|
|
@@ -880,6 +918,7 @@ async def main():
|
|
|
880
918
|
cl.battle(usdc, rub, True, ["volet"], 79),
|
|
881
919
|
cl.take(usdt, rub, False, ceil=80.5, volume=360),
|
|
882
920
|
cl.take(usdt, rub, True, ceil=80.5, volume=360),
|
|
921
|
+
cl.get_api_orders(1),
|
|
883
922
|
)
|
|
884
923
|
|
|
885
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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[
|
|
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:
|
|
196
|
-
confirmedPayTerm:
|
|
197
|
+
paymentTermResult: CredEpyd
|
|
198
|
+
confirmedPayTerm: CredEpyd
|
|
197
199
|
appealedTimes: str
|
|
198
200
|
orderFinishMinute: int
|
|
199
201
|
makerFee: str
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Binance/test_binance.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Bybit/test_bybit_p2p.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Htx/test_htx_p2p.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/tests/_todo_refact/Wallet/test_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.mjs
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client/Pms/Volet/_todo_req/req.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev12 → xync_client-0.0.57.dev14}/xync_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|