xync-db 0.5.5.dev23__tar.gz → 0.5.5.dev25__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.dev23 → xync_db-0.5.5.dev25}/PKG-INFO +1 -1
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/models/__init__.py +27 -3
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/.gitignore +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/README.md +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/pyproject.toml +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/config.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/enums.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/exceptions.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/graph.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/i18n.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/login_store.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/logo.png +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/0001_initial.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/0002_triggers.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/0003_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_actor_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_bin_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_country_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_tg_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/b_htx_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/c_net_seed.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/countries.json +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/ranges.csv +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/xync_files.sql +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/models/CLAUDE.md +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/py.typed +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/shared.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/__init__.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/actor.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/ad.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/common.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/cred.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/order.py +0 -0
- {xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/typs/db/pm.py +0 -0
|
@@ -1245,9 +1245,24 @@ class Agent(Model, TsTrait):
|
|
|
1245
1245
|
|
|
1246
1246
|
@classmethod
|
|
1247
1247
|
async def upsert(
|
|
1248
|
-
cls,
|
|
1248
|
+
cls,
|
|
1249
|
+
exid: int,
|
|
1250
|
+
host: str,
|
|
1251
|
+
auth: dict,
|
|
1252
|
+
exp: int | None,
|
|
1253
|
+
rname: str,
|
|
1254
|
+
nick: str,
|
|
1255
|
+
email: str | None = None,
|
|
1256
|
+
user: User | None = None,
|
|
1249
1257
|
) -> tuple[int, Agent, bool]:
|
|
1250
|
-
"""Единый писатель агента (за `/public/set-agent`).
|
|
1258
|
+
"""Единый писатель агента (за `/public/set-agent` и OAuth «Connect Bybit»). `exp=None` — срок
|
|
1259
|
+
web-сессии неизвестен (Htx/Mexc, голые API-ключи из OAuth) → `expire_at` не трогаем.
|
|
1260
|
+
|
|
1261
|
+
`user` — владелец УЖЕ известен (OAuth из приложения залогиненного юзера): актор сразу
|
|
1262
|
+
привязывается к нему `Actor.set_user` (тот же мердж персон, что по ответу админа), без
|
|
1263
|
+
USER_DEF-вопроса «чей это агент?». Актор чужого юзера → PermissionError, агента не трогаем.
|
|
1264
|
+
|
|
1265
|
+
Bootstrap-персону нового актора резолвим
|
|
1251
1266
|
ПО `note` (`"{ex_id}:{exid}"`, уникальному по актору) — тем же ключом, что клиентский
|
|
1252
1267
|
`Ex.person_save`, чтобы у Person был ОДИН путь создания (D-035). По НЕуникальному `name` НЕ
|
|
1253
1268
|
ищем: именно `get_or_none(name=rname)` ронял прод `MultipleObjectsReturned` на тёзках без юзера.
|
|
@@ -1265,6 +1280,8 @@ class Agent(Model, TsTrait):
|
|
|
1265
1280
|
note = f"{ex.id}:{exid}" # ключ bootstrap-персоны актора (как в Ex.person_save)
|
|
1266
1281
|
if person := await Person.get_or_none(note=note):
|
|
1267
1282
|
pass # актор уже знаком — берём его bootstrap-персону
|
|
1283
|
+
elif user: # владелец известен — персона без USER_DEF (админа не зовём), к юзеру ниже set_user'ом
|
|
1284
|
+
person = await Person.create(name=rname, note=note)
|
|
1268
1285
|
else:
|
|
1269
1286
|
# gmail-автолинк: замаскированная биржей почта, однозначно (ровно 1 gmail по LIKE,
|
|
1270
1287
|
# где `*`→`_`) указывающая на юзера, сразу привязывает актора к его персоне — без
|
|
@@ -1286,9 +1303,16 @@ class Agent(Model, TsTrait):
|
|
|
1286
1303
|
person = await Person.create(name=rname, note=note, status=PersonStatus.USER_DEF)
|
|
1287
1304
|
err = 1 # ждём привязки к юзеру через def_user
|
|
1288
1305
|
actor = await Actor.create(ex=ex, exid=exid, name=nick, person=person)
|
|
1306
|
+
if user:
|
|
1307
|
+
await actor.fetch_related("person")
|
|
1308
|
+
if actor.person.user_id not in (None, user.id):
|
|
1309
|
+
raise PermissionError(f"Actor#{actor.id} ({ex.name}:{exid}) belongs to user#{actor.person.user_id}")
|
|
1310
|
+
if not actor.person.user_id:
|
|
1311
|
+
await actor.set_user(user.username_id)
|
|
1289
1312
|
if ag := await Agent.get_or_none(actor=actor):
|
|
1290
1313
|
ag.auth |= auth
|
|
1291
|
-
|
|
1314
|
+
if exp is not None:
|
|
1315
|
+
ag.expire_at = exp
|
|
1292
1316
|
await ag.save(update_fields=["auth", "expire_at"])
|
|
1293
1317
|
created = False
|
|
1294
1318
|
else:
|
|
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_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_actor_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_bin_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/a_country_seed.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/b_htx_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/c_net_seed.py
RENAMED
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/src/xync_db/migrations/models/seed/countries.json
RENAMED
|
File without changes
|
|
File without changes
|
{xync_db-0.5.5.dev23 → xync_db-0.5.5.dev25}/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
|