xync-client 0.0.57.dev11__tar.gz → 0.0.57.dev12__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.dev11/xync_client.egg-info → xync_client-0.0.57.dev12}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/agent.py +61 -112
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/.env.sample +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/.gitignore +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/README.md +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/makefile +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/pyproject.toml +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/setup.cfg +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/TestAgent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/TestAsset.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/TestEx.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/TestOrder.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/Auth.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/Ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/InAgent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Abc/xtype.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/InAgent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/etype/cred.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/etype/order.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/order.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Bybit/ws.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Gmail/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/.gitignore +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Alfa/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Alfa/state.json +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Ozon/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Sber/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Tinkoff/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Tinkoff/state.json +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/pl.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/__init__.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/loader.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client.egg-info/SOURCES.txt +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -383,11 +383,17 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
383
383
|
)
|
|
384
384
|
|
|
385
385
|
async def get_api_orders(
|
|
386
|
-
self,
|
|
386
|
+
self,
|
|
387
|
+
page: int = 1,
|
|
388
|
+
begin_time: int = None,
|
|
389
|
+
end_time: int = None,
|
|
390
|
+
status: int = None,
|
|
391
|
+
side: int = None,
|
|
392
|
+
token_id: str = None,
|
|
387
393
|
):
|
|
388
394
|
try:
|
|
389
395
|
lst = self.api.get_orders(
|
|
390
|
-
page=
|
|
396
|
+
page=page,
|
|
391
397
|
size=30,
|
|
392
398
|
# status=status, # 50 - завершено
|
|
393
399
|
# tokenId=token_id,
|
|
@@ -397,7 +403,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
397
403
|
)
|
|
398
404
|
except FailedRequestError as e:
|
|
399
405
|
if e.status_code == 10000:
|
|
400
|
-
await sleep(1, await self.get_api_orders(begin_time, end_time, status, side, token_id))
|
|
406
|
+
await sleep(1, await self.get_api_orders(page, begin_time, end_time, status, side, token_id))
|
|
401
407
|
ords = {int(o["id"]): OrderItem.model_validate(o) for o in lst["result"]["items"]}
|
|
402
408
|
for oid, o in ords.items():
|
|
403
409
|
fo = self.api.get_order_details(orderId=oid)
|
|
@@ -407,21 +413,26 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
407
413
|
im_maker = order.makerUserId == o.userId
|
|
408
414
|
taker_id = (o.userId, o.targetUserId)[int(im_maker)]
|
|
409
415
|
taker_nick = (self.actor.name, o.targetNickName)[int(im_maker)]
|
|
410
|
-
ad_db, cond_isnew = await self.cond_upsert(ad, maker_name[ad.side])
|
|
416
|
+
ad_db, cond_isnew = await self.cond_upsert(ad, maker_name[ad.side], force=True)
|
|
411
417
|
if not ad_db:
|
|
412
418
|
...
|
|
413
|
-
cred
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
419
|
+
if (cred := order.confirmedPayTerm).paymentType:
|
|
420
|
+
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)
|
|
422
|
+
if not (
|
|
423
|
+
crd := await models.Cred.get_or_none(
|
|
424
|
+
pmcur=pmcur, person=ad_db.maker.person, detail=cred.accountNo
|
|
425
|
+
)
|
|
426
|
+
):
|
|
427
|
+
extr = cred.bankName or cred.branchName or cred.qrcode or cred.payMessage or cred.paymentExt1
|
|
428
|
+
crd = await models.Cred.create(
|
|
429
|
+
detail=cred.accountNo,
|
|
430
|
+
pmcur=pmcur,
|
|
431
|
+
person=ad_db.maker.person,
|
|
432
|
+
name=cred.realName,
|
|
433
|
+
extra=extr,
|
|
434
|
+
)
|
|
435
|
+
credex = await models.CredEx.create(exid=cred.id, ex=self.ex_client.ex, cred=crd)
|
|
425
436
|
taker_person, _ = await Person.get_or_create(name=maker_name[::-1][ad.side])
|
|
426
437
|
taker, _ = await Actor.get_or_create(
|
|
427
438
|
{"name": taker_nick}, person=taker_person, ex=self.ex_client.ex, exid=taker_id
|
|
@@ -431,9 +442,10 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
431
442
|
"amount": o.amount,
|
|
432
443
|
"status": OrderStatus[Statuses(o.status).name],
|
|
433
444
|
"created_at": int(o.createDate[:-3]),
|
|
434
|
-
"payed_at": int(order.transferDate[:-3]),
|
|
435
|
-
"confirmed_at": int(order.updateDate[:-3]),
|
|
436
|
-
"
|
|
445
|
+
"payed_at": order.transferDate != "0" and int(order.transferDate[:-3]),
|
|
446
|
+
"confirmed_at": Statuses(o.status) == Statuses.completed and int(order.updateDate[:-3]),
|
|
447
|
+
"appealed_at": o.status == 30 and int(order.updateDate[:-3]),
|
|
448
|
+
"cred_id": cred.paymentType and credex.cred_id or None,
|
|
437
449
|
"taker": taker,
|
|
438
450
|
},
|
|
439
451
|
exid=o.id,
|
|
@@ -454,7 +466,9 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
454
466
|
for m in msgs
|
|
455
467
|
]
|
|
456
468
|
_ = await models.Msg.bulk_create(msgs_db, ignore_conflicts=True)
|
|
457
|
-
|
|
469
|
+
logging.info(f"orders page#{page} imported ok!")
|
|
470
|
+
if len(ords) == 30:
|
|
471
|
+
await self.get_api_orders(page + 1, begin_time, end_time, status, side, token_id)
|
|
458
472
|
|
|
459
473
|
async def mad_upd(self, mad: Ad, attrs: dict, cxids: list[str]):
|
|
460
474
|
if not [setattr(mad, k, v) for k, v in attrs.items() if getattr(mad, k) != v]:
|
|
@@ -616,10 +630,6 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
616
630
|
pairex__pair__cur_id=curex.cur_id,
|
|
617
631
|
sell=is_sell,
|
|
618
632
|
)
|
|
619
|
-
self.all_conds = {
|
|
620
|
-
c.id: (c.raw_txt, {str(a.maker.exid) for a in c.ads})
|
|
621
|
-
for c in await Cond.all().prefetch_related("ads__maker")
|
|
622
|
-
}
|
|
623
633
|
while self.actor.person.user.status > 0: # todo: depends on rest asset/fiat
|
|
624
634
|
ads: list[Ad] = await self.ads(coinex, curex, is_sell, pms and list(creds.keys()))
|
|
625
635
|
|
|
@@ -656,10 +666,14 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
656
666
|
logging.warning("Connection failed. Restarting..")
|
|
657
667
|
await sleep(6)
|
|
658
668
|
|
|
659
|
-
async def cond_upsert(
|
|
660
|
-
|
|
669
|
+
async def cond_upsert(
|
|
670
|
+
self, ad: Ad, rname: str = None, dr: Direction = None, force: bool = False
|
|
671
|
+
) -> tuple[models.Ad, bool]:
|
|
672
|
+
sim, cid = None, None
|
|
661
673
|
# если точно такое условие уже есть в бд, ниче делать не надо
|
|
662
|
-
if not (cleaned := clean(ad.remark)) or
|
|
674
|
+
if not (cleaned := clean(ad.remark)) or (cid := {oc[0]: ci for ci, oc in self.all_conds.items()}.get(cleaned)):
|
|
675
|
+
if force:
|
|
676
|
+
return await models.Ad.get_or_none(exid=ad.id) or await self.ad_create(ad, cid, rname, dr), False
|
|
663
677
|
return None, False
|
|
664
678
|
# если эта объява уже есть в бд
|
|
665
679
|
if ad_db := await models.Ad.get_or_none(exid=ad.id).prefetch_related("cond__ads__maker", "maker__person"):
|
|
@@ -676,7 +690,9 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
676
690
|
return ad_db, True
|
|
677
691
|
# проверка на всякий что точно нет такого условия
|
|
678
692
|
if new_cond := await Cond.get_or_none(raw_txt=cleaned):
|
|
679
|
-
logging.
|
|
693
|
+
logging.warning(f"Условие {new_cond.id} появилось в бд из других потоков")
|
|
694
|
+
if rest_ads and rest_uids:
|
|
695
|
+
logging.exception("И оно есть объявах других юезров", rest_ads, rest_uids)
|
|
680
696
|
# если других объяв со старым условием этой обявы нет, либо они все этого же юзера
|
|
681
697
|
# обновляем условие (в тч во всех ЕГО объявах)
|
|
682
698
|
ad_db.cond.last_ver = ad_db.cond.raw_txt
|
|
@@ -707,18 +723,28 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
707
723
|
|
|
708
724
|
new_cond = await Cond.create(raw_txt=cleaned)
|
|
709
725
|
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
|
+
# если нашелся похожий текст у другого юзера, добавим связь с % похожести
|
|
729
|
+
if sim:
|
|
730
|
+
await self.sim_new(new_cond.id, sim, old_cid)
|
|
731
|
+
|
|
732
|
+
await ad_db.fetch_related("cond", "maker__person")
|
|
733
|
+
return ad_db, True
|
|
734
|
+
|
|
735
|
+
async def ad_create(self, ad: Ad, cid: int, rname: str = None, dr: Direction = None) -> models.Ad:
|
|
710
736
|
act_df = {}
|
|
711
737
|
if int(ad.userId) != self.actor.exid:
|
|
712
738
|
act_df |= {"name": ad.nickName}
|
|
713
739
|
if rname:
|
|
714
740
|
act_df |= {"person": (await Person.get_or_create(name=rname))[0]}
|
|
715
741
|
actor, _ = await Actor.update_or_create(act_df, exid=ad.userId, ex=self.ex_client.ex)
|
|
716
|
-
|
|
742
|
+
return await models.Ad.create(
|
|
717
743
|
price=ad.price,
|
|
718
744
|
amount=float(ad.quantity) * float(ad.price),
|
|
719
745
|
min_fiat=ad.minAmount,
|
|
720
746
|
max_fiat=ad.maxAmount,
|
|
721
|
-
|
|
747
|
+
cond_id=cid,
|
|
722
748
|
exid=int(ad.id),
|
|
723
749
|
direction=dr
|
|
724
750
|
or await Direction.get(
|
|
@@ -730,13 +756,6 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
730
756
|
maker=actor,
|
|
731
757
|
)
|
|
732
758
|
|
|
733
|
-
# если нашелся похожий текст у другого юзера, добавим связь с % похожести
|
|
734
|
-
if sim:
|
|
735
|
-
await self.sim_new(new_cond.id, sim, old_cid)
|
|
736
|
-
|
|
737
|
-
await ad_db.fetch_related("cond", "maker__person")
|
|
738
|
-
return ad_db, True
|
|
739
|
-
|
|
740
759
|
async def sim_new(self, new_cid: int, sim: int, old_cid: int):
|
|
741
760
|
if not sim:
|
|
742
761
|
return None
|
|
@@ -749,80 +768,6 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
749
768
|
sim_db.similarity = get_sim(new_txt, op_cond.raw_txt)
|
|
750
769
|
await sim_db.save()
|
|
751
770
|
|
|
752
|
-
#
|
|
753
|
-
# async def cond_upsert(
|
|
754
|
-
# self, ad: Ad, rname: str = None, dr: Direction = None, cid: int = 0
|
|
755
|
-
# ) -> tuple[models.Ad, bool]:
|
|
756
|
-
# sim = None
|
|
757
|
-
# dr = dr or await Direction.get(
|
|
758
|
-
# sell=ad.side,
|
|
759
|
-
# pairex__ex=self.ex_client.ex,
|
|
760
|
-
# pairex__pair__coin__ticker=ad.tokenId,
|
|
761
|
-
# pairex__pair__cur__ticker=ad.currencyId,
|
|
762
|
-
# )
|
|
763
|
-
# # если точно такого условия еще нет в бд
|
|
764
|
-
# old_conds = self.all_conds.copy() if cid else self.all_conds
|
|
765
|
-
# if cid: # если есть то это не текущий проверяемый cond
|
|
766
|
-
# old_conds.pop(cid)
|
|
767
|
-
# if (cleaned := clean(ad.remark)) and cleaned not in {oc[0] for oc in old_conds.values()}:
|
|
768
|
-
# # находим все старые тексты похожие на 90% и более
|
|
769
|
-
# if sim_connds := {
|
|
770
|
-
# old_cid: (txt, sim)
|
|
771
|
-
# for old_cid, (txt, uids) in old_conds.items()
|
|
772
|
-
# if len(cleaned) > 15
|
|
773
|
-
# and ad.userId not in uids
|
|
774
|
-
# and cid not in self.sim_conds.get(old_cid, {})
|
|
775
|
-
# and (sim := int((SequenceMatcher(None, cleaned, txt).ratio() - 0.9) * 10_000))
|
|
776
|
-
# > self.cond_sims.get(cid, (..., 0))[1]
|
|
777
|
-
# }:
|
|
778
|
-
# # если есть, берем самый похожий из них
|
|
779
|
-
# old_cid, (txt, sim) = max(sim_connds.items(), key=lambda x: x[1])
|
|
780
|
-
# old_ads = await models.Ad.filter(cond_id=old_cid, maker__exid=int(ad.userId)).prefetch_related("cond")
|
|
781
|
-
# for old_ad in old_ads:
|
|
782
|
-
# # и у этого чела есть объява с почти таким же текстом
|
|
783
|
-
# if old_ad.exid == int(ad.id): # и он изменил текст как раз в ней
|
|
784
|
-
# # заменяем текст без создания нового cond
|
|
785
|
-
# await old_ad.cond.update_or_create(raw_txt=cleaned)
|
|
786
|
-
# await old_ad.fetch_related("cond")
|
|
787
|
-
# return old_ad, False
|
|
788
|
-
# # но это не она, значит у него есть другая объява с похожим, но чуть отличающимся текстом
|
|
789
|
-
# logging.warning(f"ad#{ad.id}-cond#{old_cid} txt updated:\n{txt}\n|\n|\nV\n{cleaned}")
|
|
790
|
-
# if not cid:
|
|
791
|
-
# cond, isnew = await Cond.get_or_create(raw_txt=cleaned)
|
|
792
|
-
# cid = cond.id
|
|
793
|
-
# if isnew:
|
|
794
|
-
# self.all_conds[cid] = cond.raw_txt, {ad.userId}
|
|
795
|
-
# if sim and sim_connds: # если нашелся похожий текст у другого юзера, добавим связь с % похожести
|
|
796
|
-
# await CondSim.update_or_create({"similarity": sim, "cond_rel_id": old_cid}, cond_id=cid)
|
|
797
|
-
# self.cond_sims[cid] = old_cid, sim
|
|
798
|
-
# self.sim_conds[old_cid].add(cid)
|
|
799
|
-
# if not ad.price:
|
|
800
|
-
# return
|
|
801
|
-
# act_df = {"name": ad.nickName}
|
|
802
|
-
# if rname:
|
|
803
|
-
# act_df |= {"person": await Person.get_or_create(name=rname)}
|
|
804
|
-
# actor, _ = await Actor.update_or_create(act_df, exid=ad.userId, ex=self.ex_client.ex)
|
|
805
|
-
# ad_db, _ = await models.Ad.update_or_create(
|
|
806
|
-
# {
|
|
807
|
-
# "price": ad.price,
|
|
808
|
-
# "amount": float(ad.quantity) * float(ad.price),
|
|
809
|
-
# "min_fiat": ad.minAmount,
|
|
810
|
-
# "max_fiat": ad.maxAmount,
|
|
811
|
-
# "cond": cond,
|
|
812
|
-
# },
|
|
813
|
-
# exid=int(ad.id),
|
|
814
|
-
# direction=dr
|
|
815
|
-
# or await Direction.get(
|
|
816
|
-
# sell=ad.side,
|
|
817
|
-
# pairex__ex=self.ex_client.ex,
|
|
818
|
-
# pairex__pair__coin__ticker=ad.tokenId,
|
|
819
|
-
# pairex__pair__cur__ticker=ad.currency,
|
|
820
|
-
# ),
|
|
821
|
-
# maker=actor,
|
|
822
|
-
# )
|
|
823
|
-
# await ad_db.fetch_related("cond")
|
|
824
|
-
# return ad_db, isnew
|
|
825
|
-
|
|
826
771
|
async def actual_cond(self):
|
|
827
772
|
self.all_conds = {
|
|
828
773
|
c.id: (c.raw_txt, {str(a.maker.exid) for a in c.ads})
|
|
@@ -917,8 +862,12 @@ async def main():
|
|
|
917
862
|
# await models.Direction.get(
|
|
918
863
|
# pairex__ex=cl.actor.ex, pairex__pair__coin__ticker="USDT", pairex__pair__cur__ticker="RUB", sell=True
|
|
919
864
|
# )
|
|
865
|
+
cl.all_conds = {
|
|
866
|
+
c.id: (c.raw_txt, {str(a.maker.exid) for a in c.ads})
|
|
867
|
+
for c in await Cond.all().prefetch_related("ads__maker")
|
|
868
|
+
}
|
|
920
869
|
# await cl.set_creds()
|
|
921
|
-
await cl.get_api_orders()
|
|
870
|
+
await cl.get_api_orders(2)
|
|
922
871
|
# await cl.actual_cond()
|
|
923
872
|
await gather(
|
|
924
873
|
cl.battle(usdt, rub, False, ["volet"], 79.97), # гонка в стакане покупки - мы продаем
|
|
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.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Binance/test_binance.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Bybit/test_bybit.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Bybit/test_bybit_p2p.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/tests/_todo_refact/Htx/test_htx_p2p.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/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
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/xync_client/Pms/Volet/_todo_req/req.mjs
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev11 → xync_client-0.0.57.dev12}/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.dev11 → xync_client-0.0.57.dev12}/xync_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|