xync-db 0.5.5.dev19__tar.gz → 0.5.5.dev23__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_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/PKG-INFO +1 -1
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/0001_initial.py +1 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/models/__init__.py +30 -3
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/__init__.py +3 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/.gitignore +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/README.md +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/pyproject.toml +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/__init__.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/config.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/enums.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/exceptions.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/graph.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/i18n.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/login_store.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/logo.png +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/__init__.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/0002_triggers.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/0003_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/__init__.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/__init__.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_actor_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_bin_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_country_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_tg_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/b_htx_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/c_net_seed.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/countries.json +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/ranges.csv +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/xync_files.sql +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/models/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/py.typed +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/shared.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/__init__.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/actor.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/ad.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/common.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/cred.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/order.py +0 -0
- {xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/typs/db/pm.py +0 -0
|
@@ -1069,6 +1069,7 @@ class Migration(migrations.Migration):
|
|
|
1069
1069
|
("tz", fields.SmallIntField(db_default=3)),
|
|
1070
1070
|
("prv", UniqBinaryField(null=True, unique=True)),
|
|
1071
1071
|
("pub", UniqBinaryField(null=True, unique=True)),
|
|
1072
|
+
("review_anon", fields.BooleanField(db_default=True)),
|
|
1072
1073
|
],
|
|
1073
1074
|
options={"table": "user", "app": "models", "pk_attr": "id"},
|
|
1074
1075
|
bases=["User", "TsTrait"],
|
|
@@ -107,6 +107,11 @@ from xync_db.typs import HotAd, HotAds, OrderResult
|
|
|
107
107
|
# место смены — на случай добавления других share-бирж.
|
|
108
108
|
SHARE_HEX_EX_IDS = [4]
|
|
109
109
|
|
|
110
|
+
# ex_id бирж, где по ПРОДАЖНОЙ hot-объяве монету отпускаем сразу по факту внутренней транзакции оплаты
|
|
111
|
+
# (XyncPay-перевод прошёл), НЕ дожидаясь, пока покупатель отметит оплату на бирже (status→paid).
|
|
112
|
+
# На остальных биржах действует общее правило: релиз только после paid (см. Order.hot_process).
|
|
113
|
+
INSTANT_RELEASE_EX_IDS = [4] # Bybit
|
|
114
|
+
|
|
110
115
|
|
|
111
116
|
class Country(BaseCountry):
|
|
112
117
|
ccn3: int | None = UInt2Field(null=True) # числовой ISO 3166-1 (базовый `code` — телефонный)
|
|
@@ -453,6 +458,9 @@ class User(TgUser, TsTrait):
|
|
|
453
458
|
# (api get_chat_member) и live — ботом-админом через chat_member-апдейты. None = не состоит / неизвестно.
|
|
454
459
|
in_channel_at: datetime | None = DatetimeSecField(null=True)
|
|
455
460
|
in_chat_at: datetime | None = DatetimeSecField(null=True)
|
|
461
|
+
# взаимный отзыв, который наш мейкер зеркалит контрагенту по hot-ордеру этого юзера, оставлять
|
|
462
|
+
# анонимно (чекбокс под списком hot-объяв в боте и вебе; по умолчанию включён)
|
|
463
|
+
review_anon: bool = BooleanField(db_default=True)
|
|
456
464
|
|
|
457
465
|
# actors: BackwardFKRelation[Actor]
|
|
458
466
|
# borrows: BackwardFKRelation[Credit]
|
|
@@ -498,6 +506,15 @@ class User(TgUser, TsTrait):
|
|
|
498
506
|
if fields:
|
|
499
507
|
await cls.filter(username_id=username_id).update(**fields)
|
|
500
508
|
|
|
509
|
+
async def set_review_anon(self, anon: bool) -> bool:
|
|
510
|
+
"""ЕДИНСТВЕННЫЙ writer User.review_anon (чекбокс «Взаимный отзыв анонимно» под списком
|
|
511
|
+
hot-объяв): пишут и веб (HotCtr.review_anon), и бот (routers.hot.filter_toggle, dim="r").
|
|
512
|
+
Возвращает записанное значение."""
|
|
513
|
+
if self.review_anon != anon:
|
|
514
|
+
self.review_anon = anon
|
|
515
|
+
await self.save(update_fields=["review_anon"])
|
|
516
|
+
return self.review_anon
|
|
517
|
+
|
|
501
518
|
async def free_assets(self):
|
|
502
519
|
assets = await Asset.filter(addr__actor__person__user__id=self.id).values("free", "addr__coin__rate")
|
|
503
520
|
return sum(asset["free"] * asset["addr__coin__rate"] for asset in assets)
|
|
@@ -1020,7 +1037,13 @@ class User(TgUser, TsTrait):
|
|
|
1020
1037
|
shared_at=sell_ad.shared_at,
|
|
1021
1038
|
)
|
|
1022
1039
|
)
|
|
1023
|
-
return HotAds(
|
|
1040
|
+
return HotAds(
|
|
1041
|
+
sells=take_sales,
|
|
1042
|
+
buys=take_buys,
|
|
1043
|
+
balance=balances,
|
|
1044
|
+
coin_balance=coin_balances,
|
|
1045
|
+
review_anon=self.review_anon,
|
|
1046
|
+
)
|
|
1024
1047
|
|
|
1025
1048
|
async def get_last_hot(self, force_create: bool = False) -> Hot:
|
|
1026
1049
|
if not force_create and (
|
|
@@ -2354,7 +2377,9 @@ class Order(Model, TsTrait):
|
|
|
2354
2377
|
if self.status == status:
|
|
2355
2378
|
return False
|
|
2356
2379
|
if not force and self.status in self._terminal_statuses:
|
|
2357
|
-
|
|
2380
|
+
# штатное эхо биржи по завершённому ордеру (Bybit шлёт canceled→paid/created ещё раз) —
|
|
2381
|
+
# ничего не произошло, поэтому DEBUG: в консоли видны только реальные смены статуса
|
|
2382
|
+
logging.debug(f"Order#{self.exid}: skip {self.status.name}→{status.name} (terminal, no force)")
|
|
2358
2383
|
return False
|
|
2359
2384
|
self.status = status
|
|
2360
2385
|
await self.save(update_fields=["status", "updated_at"]) # updated_at auto_now
|
|
@@ -2402,7 +2427,9 @@ class Order(Model, TsTrait):
|
|
|
2402
2427
|
# продажная объява: монету отпускаем только ПОСЛЕ того, как покупатель отметит оплату на # noqa: RUF003
|
|
2403
2428
|
# бирже (status→paid). Пока ордер created — не рассчитываемся (XyncPay) и не релизим, чтобы
|
|
2404
2429
|
# не отдать монету за неоплаченный ордер; релиз дожмёт hot_order_upd на переходе в paid.
|
|
2405
|
-
|
|
2430
|
+
# Исключение — INSTANT_RELEASE_EX_IDS (Bybit): там отпускаем прямо на created, как только
|
|
2431
|
+
# прошла внутренняя транзакция оплаты (pay() ниже), не дожидаясь paid от покупателя.
|
|
2432
|
+
if self.ad.pair_side.is_sell and self.ad.maker.ex_id not in INSTANT_RELEASE_EX_IDS:
|
|
2406
2433
|
res.err = OrderErr.i_wait_for_payment
|
|
2407
2434
|
res.data = OrderResult.Order.load(self)
|
|
2408
2435
|
return res
|
|
@@ -50,3 +50,6 @@ class HotAds(Xs):
|
|
|
50
50
|
balance: dict[int, float] # остаток по каждой валюте (cur_id → сумма)
|
|
51
51
|
# остаток монет у акторов персон юзера: ex_id → coin_id → сумма asset.free
|
|
52
52
|
coin_balance: dict[int, dict[int, int]]
|
|
53
|
+
# состояние чекбокса «Взаимный отзыв анонимно» под списком объяв (User.review_anon) — его
|
|
54
|
+
# рисуют оба клиента (бот hot_kb, web HotPage), поэтому едет тем же payload'ом, что и объявы
|
|
55
|
+
review_anon: bool = True
|
|
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_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_actor_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_bin_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/a_country_seed.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/b_htx_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/c_net_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/countries.json
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev19 → xync_db-0.5.5.dev23}/src/xync_db/migrations/models/seed/xync_files.sql
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
|