xync-db 0.5.5.dev25__tar.gz → 0.5.5.dev30__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.dev25 → xync_db-0.5.5.dev30}/PKG-INFO +1 -1
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/login_store.py +1 -1
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_actor_seed.py +1 -1
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/c_net_seed.py +1 -1
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/models/__init__.py +16 -11
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/.gitignore +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/README.md +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/pyproject.toml +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/config.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/enums.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/exceptions.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/graph.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/i18n.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/logo.png +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/0001_initial.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/0002_triggers.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/0003_seed.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_bin_seed.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_country_seed.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_tg_seed.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/b_htx_seed.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/countries.json +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/ranges.csv +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/xync_files.sql +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/models/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/py.typed +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/shared.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/__init__.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/actor.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/ad.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/common.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/cred.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/order.py +0 -0
- {xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/typs/db/pm.py +0 -0
|
@@ -88,7 +88,7 @@ async def login_fulfil(token: str, payload: dict[str, Any]) -> bool:
|
|
|
88
88
|
return True
|
|
89
89
|
|
|
90
90
|
|
|
91
|
-
async def login_take(token: str) -> dict[str, Any] |
|
|
91
|
+
async def login_take(token: str) -> dict[str, Any] | object | None:
|
|
92
92
|
"""Poll a token. Returns `MISSING` if it never existed / expired, `None` if it exists but
|
|
93
93
|
Start wasn't tapped yet, or the payload dict once ready (consumed: the token is deleted)."""
|
|
94
94
|
if _redis is not None:
|
{xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_actor_seed.py
RENAMED
|
@@ -266,7 +266,7 @@ async def actor_seed(db: BaseDBAsyncClient) -> str:
|
|
|
266
266
|
btc, _ = await Coin.update_or_create(dict(scale=8), id=2, ticker="BTC")
|
|
267
267
|
eth, _ = await Coin.update_or_create(dict(scale=8), id=3, ticker="ETH")
|
|
268
268
|
usdc, _ = await Coin.update_or_create(dict(scale=4), id=4, ticker="USDC")
|
|
269
|
-
|
|
269
|
+
gram, _ = await Coin.update_or_create(dict(scale=4), id=5, ticker="GRAM")
|
|
270
270
|
sol, _ = await Coin.update_or_create(dict(scale=8), id=6, ticker="SOL")
|
|
271
271
|
bnb, _ = await Coin.update_or_create(dict(scale=8), id=7, ticker="BNB")
|
|
272
272
|
xrp, _ = await Coin.update_or_create(dict(scale=8), id=8, ticker="XRP")
|
|
@@ -179,7 +179,7 @@ class Net(Model):
|
|
|
179
179
|
|
|
180
180
|
class CoinNet(Model):
|
|
181
181
|
"""В каких сетях живёт кастодиальная монета и по какому контракту (web3.md → GET /public/coin-nets).
|
|
182
|
-
contract=None → монета нативна для сети (ETH в eth,
|
|
182
|
+
contract=None → монета нативна для сети (ETH в eth, GRAM в ton…). decimals — on-chain decimals токена
|
|
183
183
|
в ЭТОЙ сети (у USDT 6 в trx/eth, 9 в ton), не путать с кастодиальным Coin.scale."""
|
|
184
184
|
|
|
185
185
|
coin: ForeignKeyRelation[Coin] = ForeignKeyField("models.Coin", "coin_nets", on_update=CASCADE)
|
|
@@ -490,6 +490,16 @@ class User(TgUser, TsTrait):
|
|
|
490
490
|
# self.pm_clients = {pma.pm_id: pma.client() for pma in self.pm_agents}
|
|
491
491
|
# self.agent_clients = {a.id: a.client() for a in self.person.actor.agents}
|
|
492
492
|
|
|
493
|
+
@property
|
|
494
|
+
def handle(self) -> str | None:
|
|
495
|
+
"""«@username» из Telegram либо None (ждёт prefetched `username`)."""
|
|
496
|
+
return self.username.username and "@" + self.username.username
|
|
497
|
+
|
|
498
|
+
@property
|
|
499
|
+
def title(self) -> str:
|
|
500
|
+
"""Отображаемое имя: first_name → @handle → id:N (ждёт prefetched `username`)."""
|
|
501
|
+
return self.first_name or self.handle or f"id:{self.id}"
|
|
502
|
+
|
|
493
503
|
@classmethod
|
|
494
504
|
async def mark_membership(
|
|
495
505
|
cls, username_id: int, *, in_channel: bool | None = None, in_chat: bool | None = None
|
|
@@ -687,13 +697,7 @@ class User(TgUser, TsTrait):
|
|
|
687
697
|
)
|
|
688
698
|
c["amount"] += a["free"] / 10**scale
|
|
689
699
|
users = await cls.filter(id__in=[uid for uid in ss if uid]).prefetch_related("username")
|
|
690
|
-
names = {
|
|
691
|
-
u.id: (
|
|
692
|
-
u.first_name or (u.username and u.username.username and "@" + u.username.username) or f"id:{u.id}",
|
|
693
|
-
u.username and u.username.username and "@" + u.username.username,
|
|
694
|
-
)
|
|
695
|
-
for u in users
|
|
696
|
-
}
|
|
700
|
+
names = {u.id: (u.title, u.handle) for u in users}
|
|
697
701
|
return cls._assemble_rich(ss, cur_meta, usdt_rate, coins_by_user, names)
|
|
698
702
|
|
|
699
703
|
async def balance(self, cur_id: int, ts: int | None = None) -> int:
|
|
@@ -1177,7 +1181,7 @@ class Agent(Model, TsTrait):
|
|
|
1177
1181
|
status: AgentStatus = IntEnumField(AgentStatus, db_default=AgentStatus.off)
|
|
1178
1182
|
same_dir_ad: int = SmallIntField(db_default=0)
|
|
1179
1183
|
# индивидуальный прокси агента: если задан, ВСЕ сессии его клиентов (Agent/Order/InAgent —
|
|
1180
|
-
# aiohttp, pybit
|
|
1184
|
+
# aiohttp, pybit, приватный WS) ходят на биржу с этого IP, чтобы запросы одного
|
|
1181
1185
|
# пользователя биржи всегда шли с одного его IP. Пусто → общий прокси-фолбэк (settings.prx).
|
|
1182
1186
|
proxy: ForeignKeyNullableRelation[Proxy] = ForeignKeyField("models.Proxy", "agents", null=True, on_update=CASCADE)
|
|
1183
1187
|
proxy_id: str | None
|
|
@@ -1250,13 +1254,14 @@ class Agent(Model, TsTrait):
|
|
|
1250
1254
|
host: str,
|
|
1251
1255
|
auth: dict,
|
|
1252
1256
|
exp: int | None,
|
|
1253
|
-
rname: str,
|
|
1257
|
+
rname: str | None,
|
|
1254
1258
|
nick: str,
|
|
1255
1259
|
email: str | None = None,
|
|
1256
1260
|
user: User | None = None,
|
|
1257
1261
|
) -> tuple[int, Agent, bool]:
|
|
1258
1262
|
"""Единый писатель агента (за `/public/set-agent` и OAuth «Connect Bybit»). `exp=None` — срок
|
|
1259
|
-
web-сессии неизвестен (Htx/Mexc, голые API-ключи из OAuth) → `expire_at` не трогаем.
|
|
1263
|
+
web-сессии неизвестен (Htx/Mexc, голые API-ключи из OAuth) → `expire_at` не трогаем. У OAuth-ключей
|
|
1264
|
+
и имени нет (`rname=None`, `nick=""`) — их дозаполнит `Ex.person_save`/`actor_save` по данным биржи.
|
|
1260
1265
|
|
|
1261
1266
|
`user` — владелец УЖЕ известен (OAuth из приложения залогиненного юзера): актор сразу
|
|
1262
1267
|
привязывается к нему `Actor.set_user` (тот же мердж персон, что по ответу админа), без
|
|
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.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_bin_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/a_country_seed.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/b_htx_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/src/xync_db/migrations/models/seed/countries.json
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev25 → xync_db-0.5.5.dev30}/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
|
|
File without changes
|