xync-schema 0.6.71__py3-none-any.whl → 0.6.73.dev3__py3-none-any.whl

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_schema/enums.py CHANGED
@@ -57,11 +57,13 @@ class TradeType(IntEnum):
57
57
 
58
58
  class PmType(IntEnum):
59
59
  bank = 0
60
- web_wallet = 1
60
+ emoney = 1
61
61
  cash = 2
62
+ card = 4
62
63
  gift_card = 3
63
- credit_card = 4
64
64
  IFSC = 5
65
+ SBP = 6
66
+ phone = 7
65
67
 
66
68
 
67
69
  class TaskType(IntEnum):
@@ -112,9 +114,7 @@ class ExAction(IntEnum):
112
114
  coins = 22 # Список торгуемых монет (с ограничениям по валютам, если есть)
113
115
  pairs = 23 # Список пар валюта/монет
114
116
  ads = 24 # Список объяв по покупке/продаже, валюте, монете, платежному методу (buy/sell, cur, coin, pm)
115
- ad = 42 # Объява по id
116
- cur_mins = 43 # Минимальные объемы валют в объявлении
117
- coin_mins = 44 # Минимальные объемы монет в объявлении
117
+ ad = 42 # Чужая объява по id
118
118
  """ Agent: Fiat """
119
119
  my_fiats = 25 # Список реквизитов моих платежных методов
120
120
  fiat_new = 26 # Создание реквизита моего платежного метода
@@ -122,6 +122,7 @@ class ExAction(IntEnum):
122
122
  fiat_del = 28 # Удаление реквизита моего платежного метода
123
123
  """ Agent: Ad """
124
124
  my_ads = 29 # Список моих объявлений
125
+ my_ad = 43 # Моя объява по id
125
126
  ad_new = 30 # Создание объявления
126
127
  ad_upd = 31 # Редактирование объявления
127
128
  ad_del = 32 # Удаление объявления
xync_schema/models.py CHANGED
@@ -66,12 +66,12 @@ class Ex(Model):
66
66
 
67
67
  pms: fields.ManyToManyRelation["Pm"]
68
68
  curs: fields.ManyToManyRelation[Cur]
69
- pmcurs: fields.ManyToManyRelation["Pmcur"] = fields.ManyToManyField("models.Pmcur", through="pmcurex")
69
+ # pmcurs: fields.ManyToManyRelation["Pmcur"] = fields.ManyToManyField("models.Pmcur", through="pmcurex")
70
70
  coins: fields.ManyToManyRelation[Coin]
71
71
 
72
- agents: fields.ReverseRelation["Agent"]
72
+ actors: fields.ReverseRelation["Actor"]
73
73
  pmexs: fields.ReverseRelation["Pmex"]
74
- pairs: fields.ReverseRelation["Pair"]
74
+ pairexs: fields.ReverseRelation["PairEx"]
75
75
  # deps: fields.ReverseRelation["Dep"]
76
76
  # tests: fields.ReverseRelation["TestEx"]
77
77
 
@@ -82,11 +82,11 @@ class Ex(Model):
82
82
  class PydanticMeta(Model.PydanticMeta):
83
83
  include = "name", "logo"
84
84
 
85
- def client(self, agent: "Agent" = None):
85
+ def client(self):
86
86
  module_name = f"xync_client.{self.name}.ex"
87
87
  __import__(module_name)
88
88
  client = sys.modules[module_name].ExClient
89
- return client(self, agent)
89
+ return client(self)
90
90
 
91
91
 
92
92
  class Curex(BaseModel):
@@ -117,37 +117,57 @@ class Coinex(BaseModel):
117
117
  unique_together = (("ex_id", "coin_id"), ("ex_id", "exid"))
118
118
 
119
119
 
120
- class Pair(Model, TsTrait):
120
+ class Pair(Model):
121
121
  id = fields.SmallIntField(True)
122
122
  coin: fields.ForeignKeyRelation[Coin] = fields.ForeignKeyField("models.Coin", related_name="pairs")
123
123
  cur: fields.ForeignKeyRelation[Cur] = fields.ForeignKeyField("models.Cur", related_name="pairs")
124
+
125
+ _name = {"coin__ticker", "cur__ticker"}
126
+
127
+ class Meta:
128
+ table_description = "Coin/Currency pairs"
129
+ unique_together = (("coin", "cur"),)
130
+
131
+
132
+ class PairEx(Model, TsTrait):
133
+ pair: fields.ForeignKeyRelation[Pair] = fields.ForeignKeyField("models.Pair", related_name="pairexs")
134
+ pair_id: int
124
135
  fee: float = fields.FloatField(default=0)
125
136
  ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="pairs")
137
+ ex_id: int
126
138
  directions: fields.ReverseRelation["Direction"]
127
139
 
128
- _name = {"coin__ticker", "cur__ticker"}
140
+ _name = {"pair__coin__ticker", "pair__cur__ticker", "ex__name"}
129
141
 
130
142
  class Meta:
131
- table_description = "Coin/Currency pairs"
132
- unique_together = (("coin", "cur", "ex"),)
143
+ table_description = "Pairs on Exs"
144
+ unique_together = (("pair", "ex"),)
133
145
 
134
146
 
135
147
  class Direction(Model):
136
148
  id = fields.SmallIntField(True)
137
- pair: fields.ForeignKeyRelation[Pair] = fields.ForeignKeyField("models.Pair", related_name="directions")
149
+ pairex: fields.ForeignKeyRelation[PairEx] = fields.ForeignKeyField("models.PairEx", related_name="directions")
150
+ pairex_id: int
138
151
  sell: bool = fields.BooleanField()
139
152
  total: int = fields.IntField(null=True)
140
153
  ads: fields.ReverseRelation["Ad"]
141
154
 
142
- _name = {"pair__coin__ticker", "pair__cur__ticker", "sell"}
155
+ _name = {"pairex__coin__ticker", "pairex__cur__ticker", "sell"}
143
156
 
144
157
  class Meta:
145
158
  table_description = "Trade directions"
146
- unique_together = (("pair", "sell"),)
159
+ unique_together = (("pairex", "sell"),)
160
+
147
161
 
162
+ class CredHolder(Model, TsTrait):
163
+ user: fields.BackwardOneToOneRelation["User"]
164
+ actor: fields.BackwardOneToOneRelation["Actor"]
148
165
 
149
- class User(Model, TsTrait, UserInfoTrait):
166
+
167
+ class User(Model, UserInfoTrait):
150
168
  id: int = fields.BigIntField(True)
169
+ ch: fields.OneToOneRelation[CredHolder] = fields.OneToOneField("models.CredHolder", "users")
170
+ ch_id: int
151
171
  forum: int = fields.BigIntField()
152
172
  role: Role = fields.IntEnumField(Role, default=Role.READER)
153
173
  status: UserStatus = fields.IntEnumField(UserStatus, default=UserStatus.RESTRICTED)
@@ -159,7 +179,7 @@ class User(Model, TsTrait, UserInfoTrait):
159
179
 
160
180
  proteges: fields.BackwardFKRelation["User"]
161
181
  agents: fields.BackwardFKRelation["Agent"]
162
- fiats: fields.BackwardFKRelation["Fiat"]
182
+ # fiats: fields.BackwardFKRelation["Fiat"]
163
183
  limits: fields.BackwardFKRelation["Limit"]
164
184
  # vpn: fields.BackwardOneToOneRelation["Vpn"]
165
185
  # invite_requests: fields.BackwardFKRelation["Invite"]
@@ -188,46 +208,49 @@ class User(Model, TsTrait, UserInfoTrait):
188
208
  # computed = ["balance"]
189
209
 
190
210
 
191
- class Contragent(Model):
211
+ class Actor(Model):
192
212
  exid: int = fields.BigIntField()
193
213
  name: int = fields.CharField(63)
194
- ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="contragents")
214
+ ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="actors")
195
215
  ex_id: int
216
+ ch: fields.OneToOneNullableRelation[CredHolder] = fields.OneToOneField("models.CredHolder", "actor", null=True)
217
+ ch_id: int
196
218
  updated_at: datetime | None = DatetimeSecField(auto_now=True)
197
219
 
198
220
  agent: fields.BackwardOneToOneRelation["Agent"]
199
- taken_orders: fields.BackwardFKRelation["Order"]
221
+ creds: fields.BackwardFKRelation["Cred"]
200
222
  my_ads: fields.BackwardFKRelation["Ad"]
223
+ taken_orders: fields.BackwardFKRelation["Order"]
201
224
 
202
225
  class Meta:
203
- table_description = "Agents"
226
+ table_description = "Actors"
204
227
  unique_together = (("ex", "exid"),)
205
228
 
206
229
 
207
- class Agent(Model):
230
+ class Agent(Model, TsTrait):
208
231
  auth: dict[str, str] = fields.JSONField(null=True)
209
- contragent: fields.OneToOneRelation[Contragent] = fields.OneToOneField("models.Contragent", "agent")
210
- contragent_id: int
232
+ actor: fields.OneToOneRelation[Actor] = fields.OneToOneField("models.Actor", "agent")
233
+ actor_id: int
211
234
  user: fields.ForeignKeyRelation[User] = fields.ForeignKeyField("models.User", related_name="agents")
212
235
  user_id: int
213
236
  assets: fields.ReverseRelation["Asset"]
214
237
 
215
- _name = {"contragent__name"}
238
+ _name = {"actor__name"}
216
239
 
217
240
  def balance(self) -> int:
218
241
  return sum(asset.free * (asset.coin.rate or 0) for asset in self.assets)
219
242
 
220
243
  class Meta:
221
244
  table_description = "Agents"
222
- unique_together = (("contragent", "user"),)
245
+ unique_together = (("actor", "user"),)
223
246
 
224
247
  class PydanticMeta(Model.PydanticMeta):
225
248
  # max_recursion = 3
226
- include = "id", "contragent__ex", "assets", "auth", "updated_at"
249
+ include = "id", "actor__ex", "assets", "auth", "updated_at"
227
250
  computed = ["balance"]
228
251
 
229
252
  def client(self):
230
- module_name = f"xync_client.{self.contragent.ex.name}.agent"
253
+ module_name = f"xync_client.{self.actor.ex.name}.agent"
231
254
  __import__(module_name)
232
255
  client = sys.modules[module_name].AgentClient
233
256
  return client(self)
@@ -241,7 +264,7 @@ class Agent(Model):
241
264
  # return client(self)
242
265
 
243
266
  def asset_client(self):
244
- module_name = f"xync_client.{self.contragent.ex.name}.asset"
267
+ module_name = f"xync_client.{self.actor.ex.name}.asset"
245
268
  __import__(module_name)
246
269
  client = sys.modules[module_name].AssetClient
247
270
  return client(self)
@@ -268,7 +291,7 @@ class Adpm(Model):
268
291
 
269
292
 
270
293
  class Ad(Model, TsTrait):
271
- id: int = fields.BigIntField(True)
294
+ exid: int = fields.BigIntField()
272
295
  direction: fields.ForeignKeyRelation[Direction] = fields.ForeignKeyField("models.Direction", related_name="ads")
273
296
  price: float = fields.FloatField()
274
297
  max_fiat: float = fields.FloatField()
@@ -277,7 +300,7 @@ class Ad(Model, TsTrait):
277
300
  auto_msg: str | None = fields.CharField(255, null=True)
278
301
  status: AdStatus = fields.IntEnumField(AdStatus, defaut=AdStatus.active)
279
302
 
280
- maker: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "my_ads")
303
+ maker: fields.ForeignKeyRelation[Actor] = fields.ForeignKeyField("models.Actor", "my_ads")
281
304
  maker_id: int
282
305
 
283
306
  pms: fields.ManyToManyRelation["Pm"] = fields.ManyToManyField("models.Pm", through="adpm") # only root pms
@@ -285,7 +308,7 @@ class Ad(Model, TsTrait):
285
308
  orders: fields.ReverseRelation["Order"]
286
309
 
287
310
  _icon = "ad"
288
- _name = {"direction__pair__coin__ticker", "direction__pair__cur__ticker", "direction__sell", "price"}
311
+ _name = {"direction__pairex__coin__ticker", "direction__pairex__cur__ticker", "direction__sell", "price"}
289
312
 
290
313
  class Meta:
291
314
  table_description = "P2P Advertisements"
@@ -369,18 +392,20 @@ class PmexBank(BaseModel): # banks for SBP
369
392
  exid: str = fields.CharField(63)
370
393
  name: str = fields.CharField(63)
371
394
 
395
+ creds: fields.ManyToManyRelation["Cred"]
396
+
372
397
  class Meta:
373
398
  unique_together = (("pmex", "exid"),)
374
399
 
375
400
 
376
- class FiatBank(BaseModel): # banks for SBP
377
- pmexbank: fields.ForeignKeyRelation[PmexBank] = fields.ForeignKeyField("models.PmexBank", "fiatbanks")
378
- pmexbank_id: int
379
- cred: fields.ForeignKeyRelation["Cred"] = fields.ForeignKeyField("models.Cred", "credbanks")
380
- cred_id: int
381
-
382
- class Meta:
383
- unique_together = (("cred_id", "pmexbank_id"),)
401
+ # class CredBank(BaseModel): # banks for SBP
402
+ # pmexbank: fields.ForeignKeyRelation[PmexBank] = fields.ForeignKeyField("models.PmexBank", "credbanks")
403
+ # pmexbank_id: int
404
+ # cred: fields.ForeignKeyRelation["Cred"] = fields.ForeignKeyField("models.Cred", "credbanks")
405
+ # cred_id: int
406
+ #
407
+ # class Meta:
408
+ # unique_together = (("cred_id", "pmexbank_id"),)
384
409
 
385
410
 
386
411
  # class Pmcurex(BaseModel): # existence pm in ex for exact cur, with "blocked" flag
@@ -402,25 +427,27 @@ class Cred(Model):
402
427
  # country_id: int
403
428
  detail: str = fields.CharField(127)
404
429
  name: str | None = fields.CharField(127, null=True)
405
- contragent: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "creds")
406
- contragent_id: int
430
+ ch: fields.ForeignKeyRelation[CredHolder] = fields.ForeignKeyField("models.CredHolder", "creds")
431
+ ch_id: int
432
+
433
+ banks: fields.ManyToManyRelation[PmexBank] = fields.ManyToManyField("models.PmexBank", related_name="creds")
407
434
 
408
435
  fiat: fields.BackwardOneToOneRelation["Fiat"]
409
- ads: fields.BackwardFKRelation[Ad]
436
+ ads: fields.ManyToManyRelation[Ad]
410
437
  orders: fields.BackwardFKRelation["Order"]
411
438
 
412
439
  _name = {"exid"}
413
440
 
414
441
  class Meta:
415
442
  table_description = "Currency accounts"
416
- unique_together = (("pmcur_id", "detail"), ("contragent", "exid"))
443
+ # unique_together = (("actor", "exid"), ("actor_id", "pmcur_id", "detail"))
417
444
 
418
445
 
419
446
  class Fiat(Model):
420
447
  cred: fields.OneToOneRelation[Cred] = fields.OneToOneField("models.Cred", "fiat")
421
448
  cred_id: int
422
449
  # user: fields.ForeignKeyRelation[User] = fields.ForeignKeyField("models.User", "fiats")
423
- # user_id: int # cred.contragent.agent.user_id
450
+ # user_id: int # cred.actor.agent.user_id
424
451
  amount: float | None = fields.FloatField(default=0)
425
452
  target: float | None = fields.FloatField(default=None, null=True)
426
453
 
@@ -484,16 +511,16 @@ class Asset(Model):
484
511
 
485
512
 
486
513
  class Order(Model):
487
- id: int = fields.BigIntField(True)
514
+ exid: int = fields.BigIntField()
488
515
  ad: fields.ForeignKeyRelation[Ad] = fields.ForeignKeyField("models.Ad", related_name="ads")
489
516
  ad_id: int
490
517
  amount: float = fields.FloatField()
491
518
  cred: fields.ForeignKeyRelation[Cred] = fields.ForeignKeyField("models.Cred", related_name="orders", null=True)
492
519
  cred_id: int | None
493
- taker: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "taken_orders")
520
+ taker: fields.ForeignKeyRelation[Actor] = fields.ForeignKeyField("models.Actor", "taken_orders")
494
521
  taker_id: int
495
- maker_topic: int = fields.IntField()
496
- taker_topic: int = fields.IntField()
522
+ maker_topic: int = fields.IntField(null=True) # todo: remove nullability
523
+ taker_topic: int = fields.IntField(null=True)
497
524
  status: OrderStatus = fields.IntEnumField(OrderStatus)
498
525
  created_at: datetime | None = DatetimeSecField(auto_now_add=True)
499
526
  payed_at: datetime | None = DatetimeSecField(null=True)
@@ -528,7 +555,7 @@ class Order(Model):
528
555
  class PydanticMeta(Model.PydanticMeta):
529
556
  max_recursion: int = 0
530
557
  exclude_raw_fields: bool = False
531
- exclude = ("taker", "ad", "fiat", "msgs")
558
+ exclude = ("taker", "ad", "cred", "msgs")
532
559
 
533
560
 
534
561
  class Msg(Model):
xync_schema/pydantic.py CHANGED
@@ -1,9 +1,8 @@
1
1
  from datetime import datetime
2
+ from pydantic import BaseModel
2
3
 
3
- from pydantic import BaseModel, model_validator
4
-
5
- from xync_schema.enums import AdStatus, PmType
6
- from xync_schema.models import Fiat, Agent, Direction, Pmcur, User, Ex
4
+ from xync_schema.enums import AdStatus, PmType, OrderStatus
5
+ from xync_schema.models import Direction, Pmcur, Cred, Actor, Pm, Ad
7
6
 
8
7
 
9
8
  class _CurCoin(BaseModel):
@@ -43,70 +42,59 @@ class PmPyd(BaseModel):
43
42
  # cur_id: int
44
43
 
45
44
 
46
- class FiatUpd(BaseModel):
47
- detail: str | None = None
45
+ class FFiat(BaseModel):
46
+ detail: str
48
47
  name: str | None = None
49
- amount: float | None = None
48
+ amount: float = 0
50
49
  target: int | None = None
50
+ banks: list[str] = []
51
51
 
52
52
 
53
- class FiatNew(FiatUpd):
53
+ class FiatNew(FFiat):
54
54
  cur_id: int
55
55
  pm_id: int
56
- detail: str
57
- amount: float = 0
58
- target: int | None = None
59
56
 
60
57
 
61
- class FiatPydIn(BaseModel):
62
- # unq
63
- id: int = None
64
- user_id: int | None = None
65
- user: User | None = None
66
- pmcur_id: int | None = None
67
- pmcur: Pmcur | None = None
68
- # df
69
- detail: str
70
- name: str = ""
71
- amount: float
72
- target: float | None = None
58
+ class FiatUpd(FFiat):
59
+ id: int
60
+ exid: int
73
61
 
74
- banks: list[str] = []
62
+
63
+ class CredPydIn(BaseModel):
64
+ id: int | None = None
65
+ exid: int
66
+ pmcur: Pmcur
67
+ actor: Actor
68
+ detail: str = ""
69
+ name: str = ""
70
+ banks: list[str] | None = None
75
71
 
76
72
  class Config:
77
73
  arbitrary_types_allowed = True
78
74
 
79
- @classmethod
80
- @model_validator(mode="before")
81
- def check_at_least_one_field(cls, values):
82
- if (values.get("pmcur") or values.get("pmcur_id")) and (values.get("user") or values.get("user_id")):
83
- return values
84
- raise ValueError("pmcur(_id) and user(_id) is required")
85
-
86
75
  def args(self) -> tuple[dict, dict]:
87
- unq: tuple[str, ...] = "id", "user_id", "user", "pmcur_id", "pmcur"
88
- df: tuple[str, ...] = "detail", "name", "amount", "target"
76
+ unq: tuple[str, ...] = "id", "exid", "actor", "pmcur"
77
+ df: tuple[str, ...] = "detail", "name"
89
78
  d = self.model_dump()
90
79
  return {k: getattr(self, k) for k in df if d.get(k)}, {k: getattr(self, k) for k in unq if d.get(k)}
91
80
 
92
81
 
93
- class FiatexPydIn(BaseModel):
94
- id: int | None = None
95
- exid: str
96
- ex: Ex | None = None
97
- ex_id: int | None = None
98
- fiat: Fiat | None = None
99
- fiat_id: int | None = None
82
+ class FiatPydIn(BaseModel):
83
+ # unq
84
+ id: int = None
85
+ cred: Cred
86
+ # df
87
+ amount: float
88
+ target: float | None = None
100
89
 
101
90
  class Config:
102
91
  arbitrary_types_allowed = True
103
92
 
104
- @classmethod
105
- @model_validator(mode="before")
106
- def check_at_least_one_field(cls, values):
107
- if (values.get("ex") or values.get("ex_id")) and (values.get("fiat") or values.get("fiat_id")):
108
- return values
109
- raise ValueError("ex(_id) and fiat(_id) is required")
93
+ def args(self) -> tuple[dict, dict]:
94
+ unq: tuple[str, ...] = "id", "cred"
95
+ df: tuple[str, ...] = "amount", "target"
96
+ d = self.model_dump()
97
+ return {k: getattr(self, k) for k in df if d.get(k)}, {k: getattr(self, k) for k in unq if d.get(k)}
110
98
 
111
99
 
112
100
  class BaseAd(BaseModel):
@@ -114,31 +102,36 @@ class BaseAd(BaseModel):
114
102
  price: float
115
103
 
116
104
 
117
- class AdPydIn(BaseAd):
105
+ class BaseAdPydIn(BaseAd):
106
+ exid: int
118
107
  min_fiat: float
119
108
  max_fiat: float | None = None
120
109
  detail: str | None = None
121
110
  auto_msg: str | None = None
122
111
  status: AdStatus = AdStatus.active
123
- agent_id: int | None = None
124
- direction_id: int | None = None
125
- agent: Agent | None = None
126
- direction: Direction | None = None
127
- pms_: list | None = None
128
- fiats_: list | None = None
112
+ maker: Actor = None
113
+ direction: Direction
129
114
 
130
115
  class Config:
131
116
  arbitrary_types_allowed = True
132
117
 
133
- @classmethod
134
- @model_validator(mode="before")
135
- def check_at_least_one_field(cls, values):
136
- agent = values.get("agent") or values.get("agent_id")
137
- direction = values.get("direction") or values.get("direction_id")
138
- pms_or_fiats = values.get("pms_") or values.get("fiats_")
139
- if agent and direction and pms_or_fiats:
140
- return values
141
- raise ValueError("(pms or fiats) and agent(_id) and direction(_id) is required")
118
+ def args(self) -> tuple[dict, dict]:
119
+ unq: tuple[str, ...] = "id", "exid", "maker", "direction"
120
+ df: tuple[str, ...] = "price", "price", "min_fiat", "max_fiat", "detail", "auto_msg", "status"
121
+ d = self.model_dump(exclude_none=True)
122
+ return {k: getattr(self, k) for k in df if d.get(k)}, {k: getattr(self, k) for k in unq if d.get(k)}
123
+
124
+
125
+ class AdBuyPydIn(BaseAdPydIn):
126
+ pms_: list[Pm]
127
+
128
+
129
+ class AdSalePydIn(BaseAdPydIn):
130
+ creds_: list[Cred]
131
+
132
+
133
+ class BaseOrder(BaseModel):
134
+ id: int | None = None
142
135
 
143
136
 
144
137
  class OrderPyd(BaseModel):
@@ -146,9 +139,9 @@ class OrderPyd(BaseModel):
146
139
  amount: float
147
140
  status: str
148
141
  actions: dict | None = {}
149
- fiat: Fiat.pyd()
142
+ cred: Cred.pyd()
150
143
  is_sell: bool
151
- contragent: int | None = None
144
+ actor: int | None = None
152
145
  created_at: datetime
153
146
  payed_at: datetime | None = None
154
147
  appealed_at: datetime | None = None
@@ -157,6 +150,31 @@ class OrderPyd(BaseModel):
157
150
  topic: int
158
151
 
159
152
 
153
+ class OrderPydIn(BaseModel):
154
+ id: int = None
155
+ exid: int
156
+ amount: float
157
+ maker_topic: int | None = None
158
+ taker_topic: int | None = None
159
+ status: OrderStatus = OrderStatus.created
160
+ created_at: datetime
161
+ payed_at: datetime | None = None
162
+ confirmed_at: datetime | None = None
163
+ appealed_at: datetime | None = None
164
+ ad: Ad
165
+ cred: Cred
166
+ taker: Actor
167
+
168
+ class Config:
169
+ arbitrary_types_allowed = True
170
+
171
+ def args(self) -> tuple[dict, dict]:
172
+ unq: tuple[str, ...] = "id", "exid", "amount", "maker_topic", "taker_topic", "ad", "cred", "taker"
173
+ df: tuple[str, ...] = "status", "created_at", "payed_at", "confirmed_at", "appealed_at"
174
+ d = self.model_dump(exclude_none=True)
175
+ return {k: getattr(self, k) for k in df if d.get(k)}, {k: getattr(self, k) for k in unq if d.get(k)}
176
+
177
+
160
178
  class UreadMsgs(BaseModel):
161
179
  order_id: int
162
180
  unread_cnt: int
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: xync-schema
3
- Version: 0.6.71
3
+ Version: 0.6.73.dev3
4
4
  Summary: XyncNet project database model schema
5
5
  Author-email: Mike Artemiev <mixartemev@gmail.com>
6
6
  License: EULA
@@ -0,0 +1,8 @@
1
+ xync_schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ xync_schema/enums.py,sha256=XlkpnQFBhrIQ11ZoufwAEKK4RmcOTUu5On1QjsoyrqA,12315
3
+ xync_schema/models.py,sha256=jiyJ-5d2E0mmOHlsWWfc2coYttvsYN4YsH8MOGtbKUg,26409
4
+ xync_schema/pydantic.py,sha256=CIX0n2VdFxRYCS3kMe8ee9Wfj2ZLe3lvFdiieu_9DZs,4259
5
+ xync_schema-0.6.73.dev3.dist-info/METADATA,sha256=mUIuJzZVYlk81TH4xbrrd26DO1GST7tJbl8ZlIY2Spw,3990
6
+ xync_schema-0.6.73.dev3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
7
+ xync_schema-0.6.73.dev3.dist-info/top_level.txt,sha256=jN8IBDfVY8b85Byyk8v0Gyj_0yLB8FO56WV4EvcXWY4,12
8
+ xync_schema-0.6.73.dev3.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- xync_schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- xync_schema/enums.py,sha256=zPdnf6J--qaBoyin_qXO3z_UnfpiHGXVHKs9v3ug1Qk,12428
3
- xync_schema/models.py,sha256=w3TOlAK9ESN0tOMb7Zbb6XK1PpsxT2j5Ck0qAY-ig3s,25512
4
- xync_schema/pydantic.py,sha256=2Gupluj7SfQs276mWH1SDzkxyOcst3naxlB4sULeU7U,4046
5
- xync_schema-0.6.71.dist-info/METADATA,sha256=xM-nC9Wbz15BWmejIJqIDrSQFLVNYwzNjAQlXBAiXhQ,3985
6
- xync_schema-0.6.71.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
7
- xync_schema-0.6.71.dist-info/top_level.txt,sha256=jN8IBDfVY8b85Byyk8v0Gyj_0yLB8FO56WV4EvcXWY4,12
8
- xync_schema-0.6.71.dist-info/RECORD,,