xync-schema 0.6.72__py3-none-any.whl → 0.6.73__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
@@ -1,6 +1,18 @@
1
1
  from enum import IntEnum
2
2
 
3
3
 
4
+ class PersonStatus(IntEnum):
5
+ VIP = 2
6
+ DEFAULT = 1
7
+ BLOCKED = 0
8
+
9
+
10
+ class UserStatus(IntEnum):
11
+ SLEEP = 0
12
+ PAY = 1
13
+ ACTIVE = 2
14
+
15
+
4
16
  class AdStatus(IntEnum):
5
17
  defActive = 0
6
18
  active = 1
@@ -57,11 +69,13 @@ class TradeType(IntEnum):
57
69
 
58
70
  class PmType(IntEnum):
59
71
  bank = 0
60
- web_wallet = 1
72
+ emoney = 1
61
73
  cash = 2
74
+ card = 4
62
75
  gift_card = 3
63
- credit_card = 4
64
76
  IFSC = 5
77
+ SBP = 6
78
+ phone = 7
65
79
 
66
80
 
67
81
  class TaskType(IntEnum):
@@ -112,6 +126,9 @@ class ExAction(IntEnum):
112
126
  coins = 22 # Список торгуемых монет (с ограничениям по валютам, если есть)
113
127
  pairs = 23 # Список пар валюта/монет
114
128
  ads = 24 # Список объяв по покупке/продаже, валюте, монете, платежному методу (buy/sell, cur, coin, pm)
129
+ set_coins = 44 # обновление монет биржи в бд
130
+ set_pmcurs = 45 # обновление валют и платежек биржи в бд
131
+ set_pairs = 46 # обновление пар биржи в бд
115
132
  ad = 42 # Чужая объява по id
116
133
  """ Agent: Fiat """
117
134
  my_fiats = 25 # Список реквизитов моих платежных методов
@@ -147,7 +164,7 @@ class ExAction(IntEnum):
147
164
  exs = {
148
165
  "Beribit": (
149
166
  ExType.p2p,
150
- "https://sun9-41.userapi.com/impg/cZCGFTXH5-11_HjiWw9aWr3__SlbmMIiXSc-ig/YtOHJpjuVW0.jpg?size=604x604&quality=95&sign=def93bbe4283c563eb2d75a5968350f2",
167
+ "AgACAgIAAxkBAAIEY2ferEZ38wZbpG9kmfFPjsSGC3CmAAIo8DEbF_j4StC_ac-XA5fbAQADAgADeAADNgQ",
151
168
  "beribit.app",
152
169
  "beribit.app",
153
170
  "beribit.app/login",
@@ -155,7 +172,7 @@ exs = {
155
172
  ),
156
173
  "Binance": (
157
174
  ExType.main,
158
- "https://assets.coingecko.com/markets/images/52/large/binance.jpg",
175
+ "AgACAgIAAxkBAAIEYGfeq1hpcgu2el0ROqFvWtWNHrtWAAIQ8DEbF_j4Sq7oecXCtoONAQADAgADbQADNgQ",
159
176
  "binance.com",
160
177
  "p2p.binance.com",
161
178
  "accounts.binance.com/login",
@@ -163,7 +180,7 @@ exs = {
163
180
  ),
164
181
  "BingX": (
165
182
  ExType.p2p,
166
- "https://assets.coingecko.com/markets/images/812/large/YtFwQwJr_400x400.jpg",
183
+ "AgACAgIAAxkBAAIEZWferWiY5ZCV2SAWgSnUan76cl-TAAIy8DEbF_j4Sq1aMXmyATzQAQADAgADbQADNgQ",
167
184
  "bingx.com",
168
185
  "api-app.we-api.com",
169
186
  "bingx.com/login",
@@ -173,7 +190,7 @@ exs = {
173
190
  "BitcoinGlobal": (ExType.p2p, "", "", "", "", ExStatus.plan),
174
191
  "BitGet": (
175
192
  ExType.p2p,
176
- "https://assets.coingecko.com/markets/images/591/large/2023-07-25_21.47.43.jpg",
193
+ "AgACAgIAAxkBAAIEZ2ferYwPfGrx1PX-C7SBToZG-h-iAAI08DEbF_j4StxKwJlnBT3XAQADAgADbQADNgQ",
177
194
  "www.bitget.com",
178
195
  "www.bitget.com",
179
196
  "www.bitget.com/login",
@@ -181,7 +198,7 @@ exs = {
181
198
  ),
182
199
  "BitPapa": (
183
200
  ExType.p2p,
184
- "https://avatars.mds.yandex.net/i?id=130c32d9900d514d738ef89b9c61bcd3_l-4767909-images-thumbs&n=13",
201
+ "AgACAgIAAxkBAAIEaWferbY69OMAASKXObrcYYLciuWVswACPPAxGxf4-EqNHJqqRTQmMgEAAwIAA3kAAzYE",
185
202
  "bitpapa.com",
186
203
  "bitpapa.com",
187
204
  "bitpapa.com/log-in",
@@ -190,7 +207,7 @@ exs = {
190
207
  "Bitvalve ": (ExType.p2p, "", "", "", "", ExStatus.plan),
191
208
  "Bybit": (
192
209
  ExType.main,
193
- "https://assets.coingecko.com/markets/images/698/large/bybit_spot.png",
210
+ "AgACAgIAAxkBAAIENGfeY4AfRquwTL2LpDrzqvFMVNt_AAIG9DEbXX3wSq3oI7t_PqQGAQADAgADbQADNgQ",
194
211
  "bybit.com",
195
212
  "api2.bybit.com",
196
213
  "bybit.com/login",
@@ -201,7 +218,7 @@ exs = {
201
218
  "Garantex": (ExType.p2p, "", "", "", "", ExStatus.plan),
202
219
  "Gate": (
203
220
  ExType.p2p,
204
- "https://assets.coingecko.com/markets/images/403/large/gate_io_logo.jpg",
221
+ "AgACAgIAAxkBAAIEMmfeY2WPV9axwELiZp9JsG1qVVSDAAIF9DEbXX3wSmqKNrQMcr0GAQADAgADbQADNgQ",
205
222
  "gate.io",
206
223
  "gate.io",
207
224
  "www.gate.io/login",
@@ -210,7 +227,7 @@ exs = {
210
227
  "HodlHodl": (ExType.p2p, "", "", "", "", ExStatus.plan),
211
228
  "Htx": (
212
229
  ExType.main,
213
- "https://assets.coingecko.com/markets/images/25/large/logo_V_colour_black.png",
230
+ "CAACAgIAAxkBAAIEQWfeZKFue_EuEx4aCWQuUUiBUFUWAAJcbQACXX3wSgpUwu_LgrVCNgQ",
214
231
  "www.htx.com",
215
232
  "www.htx.com",
216
233
  "htx.com/login",
@@ -219,7 +236,7 @@ exs = {
219
236
  "Koshelek": (ExType.p2p, "", "", "", "", ExStatus.plan),
220
237
  "KuCoin": (
221
238
  ExType.main,
222
- "https://assets.coingecko.com/markets/images/61/large/kucoin.png",
239
+ "AgACAgIAAxkBAAIELWfeYuCy-IaY2x4WDEFV30eDAlrLAAIC9DEbXX3wSskAAdr5c_L0LQEAAwIAA20AAzYE",
223
240
  "kucoin.com",
224
241
  "kucoin.com",
225
242
  "www.kucoin.com/ucenter/signin",
@@ -229,7 +246,7 @@ exs = {
229
246
  "LocalMonero": (ExType.p2p, "", "", "", "", ExStatus.plan),
230
247
  "Mexc": (
231
248
  ExType.main,
232
- "https://assets.coingecko.com/markets/images/409/large/MEXC_logo_square.jpeg",
249
+ "AgACAgIAAxkBAAIEJ2feYl-98-SXYJQAARlswmCK7ihM-gAD9DEbXX3wSheqy--NeUvRAQADAgADbQADNgQ",
233
250
  "www.mexc.com",
234
251
  "www.mexc.com",
235
252
  "www.mexc.com/login",
@@ -238,7 +255,7 @@ exs = {
238
255
  "Noones ": (ExType.p2p, "", "", "", "", ExStatus.plan),
239
256
  "Okx": (
240
257
  ExType.main,
241
- "https://assets.coingecko.com/markets/images/379/large/WeChat_Image_20220117220452.png",
258
+ "AgACAgIAAxkBAAIEJWfeYkG29cU8Nt1oaiskDutGInGvAAL_8zEbXX3wSrPVVMfw6kI5AQADAgADeQADNgQ",
242
259
  "www.okx.cab",
243
260
  "www.okx.cab",
244
261
  "www.okx.cab/account/login",
@@ -253,7 +270,7 @@ exs = {
253
270
  "RoboSats": (ExType.p2p, "", "", "", "", ExStatus.plan),
254
271
  "Sigen": (
255
272
  ExType.p2p,
256
- "https://yastatic.net/naydex/yandex-search/neZ1W6346/a21f02dA/2SvJ6dTLJwRiz_lTFP-fhywHqi1fxPNRcIxuKzcpwJ0DGlJzbzdT8ARet86SrINoGNj87R9U-t8HLZcrrBASQf0_6OkAL7cgl6uc0gCrHxI9Y369emE2MJF5yotCyODdZ5iXljtkQJMXTMV9VXsEL68seaiqQF578wnB3V",
273
+ "AgACAgIAAxkBAAIEIWfeYbAYWyMCtPtZ6q233_7VoQ87AAL-8zEbXX3wSqgLi3m0_G7AAQADAgADbQADNgQ",
257
274
  "sigen.pro",
258
275
  "sigen.pro",
259
276
  "sigen.pro/p2p",
@@ -264,7 +281,7 @@ exs = {
264
281
  "Solid": (ExType.main, "", "", "", "", ExStatus.plan),
265
282
  "TgWallet": (
266
283
  ExType.tg,
267
- "https://telerock.ru/uploads/posts/2024-03/f658443d9e_c9d505bbf856e2360ba6812079ba02d0.webp",
284
+ "AgACAgIAAxkBAAIEEGfd3oDil7jFpVEZh_ek2RlmDSrpAALA6jEb7cjwSo3tCIf7UsVoAQADAgADbQADNgQ",
268
285
  "walletbot.me",
269
286
  "p2p.walletbot.me",
270
287
  "walletbot.me",
@@ -274,7 +291,7 @@ exs = {
274
291
  "WazirX": (ExType.p2p, "", "", "", "", ExStatus.plan),
275
292
  "WebMoney": (
276
293
  ExType.p2p,
277
- "https://vectorseek.com/wp-content/uploads/2023/08/Webmoney-Icon-Logo-Vector.svg-.png",
294
+ "AgACAgIAAxkBAAIEb2ferkkq2wWB-aJwIY6I2VZxSK4CAAJM8DEbF_j4SlHZDVKCzkUxAQADAgADeQADNgQ",
278
295
  "exchanger.money",
279
296
  "exchanger.money",
280
297
  "exchanger.money",
@@ -283,7 +300,7 @@ exs = {
283
300
  "WhiteBIT": (ExType.p2p, "", "", "", "", ExStatus.plan),
284
301
  "xRocket": (
285
302
  ExType.p2p,
286
- "https://cdn.allmylinks.com/prod/Upload/file/R/L/6/8G0TaGNtUV8C1V7VQsivDtJcpEz2z7Lc.jpg",
303
+ "AgACAgIAAxkBAAIEHWfeXy5a7fM9D5ys8ReQrDIRpwAB0wAC8_MxG1198Eo01GgWSVjQ3wEAAwIAA3gAAzYE",
287
304
  "",
288
305
  "",
289
306
  "",
xync_schema/models.py CHANGED
@@ -1,36 +1,45 @@
1
1
  import sys
2
2
  from datetime import datetime
3
+
3
4
  from tortoise import fields
4
5
  from tortoise.queryset import QuerySet
5
6
  from tortoise import Model as BaseModel
6
- from x_auth.enums import Role
7
- from x_auth.models import Model
7
+ from x_auth.models import Model, UserTg
8
8
  from x_model.models import TsTrait, DatetimeSecField
9
- from tg_auth.models import UserStatus, AuthUser, UserInfoTrait
10
9
 
11
- from xync_schema.enums import ExType, AdStatus, AssetType, OrderStatus, ExAction, ExStatus
10
+ from xync_schema.enums import (
11
+ ExType,
12
+ AdStatus,
13
+ AssetType,
14
+ OrderStatus,
15
+ ExAction,
16
+ ExStatus,
17
+ PersonStatus,
18
+ UserStatus,
19
+ PmType,
20
+ )
12
21
 
13
22
 
14
- # class Country(Model):
15
- # id = fields.SmallIntField(True)
16
- # code: int | None = fields.IntField(null=True)
17
- # short: str | None = fields.CharField(3, unique=True, null=True)
18
- # name: str | None = fields.CharField(63, unique=True, null=True)
19
- # cur: fields.ForeignKeyRelation["Cur"] = fields.ForeignKeyField("models.Cur", related_name="countries")
20
- # curexs: fields.ManyToManyRelation["Curex"]
21
- # fiats: fields.BackwardFKRelation["Fiat"]
23
+ class Country(Model):
24
+ id = fields.SmallIntField(True)
25
+ code: int | None = fields.IntField(null=True)
26
+ short: str | None = fields.CharField(3, null=True)
27
+ name: str | None = fields.CharField(63, unique=True, null=True)
28
+ cur: fields.ForeignKeyRelation["Cur"] = fields.ForeignKeyField("models.Cur", related_name="countries")
29
+ curexs: fields.ManyToManyRelation["Curex"]
30
+ fiats: fields.BackwardFKRelation["Fiat"]
22
31
 
23
32
 
24
33
  class Cur(Model):
25
34
  id = fields.SmallIntField(True)
26
35
  ticker: str = fields.CharField(3, unique=True)
36
+ scale: int = fields.SmallIntField(default=0)
27
37
  rate: float | None = fields.FloatField(default=0, null=True)
28
- # country: str | None = fields.CharField(63, null=True)
29
38
 
30
39
  pms: fields.ManyToManyRelation["Pm"] = fields.ManyToManyField("models.Pm", through="pmcur")
31
40
  exs: fields.ManyToManyRelation["Ex"] = fields.ManyToManyField("models.Ex", through="curex")
32
41
  pairs: fields.ReverseRelation["Pair"]
33
- # countries: fields.ReverseRelation[Country]
42
+ countries: fields.ReverseRelation[Country]
34
43
 
35
44
  _name = {"ticker"}
36
45
 
@@ -41,6 +50,7 @@ class Cur(Model):
41
50
  class Coin(Model):
42
51
  id: int = fields.SmallIntField(True)
43
52
  ticker: str = fields.CharField(15, unique=True)
53
+ scale: int = fields.SmallIntField(default=0)
44
54
  rate: float | None = fields.FloatField(default=0)
45
55
  is_fiat: bool = fields.BooleanField(default=False)
46
56
  exs: fields.ManyToManyRelation["Ex"] = fields.ManyToManyField("models.Ex", through="coinex")
@@ -66,14 +76,14 @@ class Ex(Model):
66
76
 
67
77
  pms: fields.ManyToManyRelation["Pm"]
68
78
  curs: fields.ManyToManyRelation[Cur]
69
- pmcurs: fields.ManyToManyRelation["Pmcur"] = fields.ManyToManyField("models.Pmcur", through="pmcurex")
79
+ # pmcurs: fields.ManyToManyRelation["Pmcur"] = fields.ManyToManyField("models.Pmcur", through="pmcurex")
70
80
  coins: fields.ManyToManyRelation[Coin]
71
81
 
72
- contragents: fields.ReverseRelation["Contragent"]
82
+ actors: fields.ReverseRelation["Actor"]
73
83
  pmexs: fields.ReverseRelation["Pmex"]
74
- pairs: fields.ReverseRelation["Pair"]
84
+ pairexs: fields.ReverseRelation["PairEx"]
75
85
  # deps: fields.ReverseRelation["Dep"]
76
- # tests: fields.ReverseRelation["TestEx"]
86
+ tests: fields.ReverseRelation["TestEx"]
77
87
 
78
88
  class Meta:
79
89
  table_description = "Exchanges"
@@ -82,22 +92,22 @@ class Ex(Model):
82
92
  class PydanticMeta(Model.PydanticMeta):
83
93
  include = "name", "logo"
84
94
 
85
- def client(self, agent: "Agent" = None):
95
+ def client(self):
86
96
  module_name = f"xync_client.{self.name}.ex"
87
97
  __import__(module_name)
88
98
  client = sys.modules[module_name].ExClient
89
- return client(self, agent)
99
+ return client(self)
90
100
 
91
101
 
92
102
  class Curex(BaseModel):
93
103
  cur: fields.ForeignKeyRelation[Cur] = fields.ForeignKeyField("models.Cur")
94
104
  ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex")
95
- exid: str = fields.CharField(31)
96
- minimum: float = fields.FloatField(null=True)
105
+ exid: str = fields.CharField(32)
106
+ minimum: int = fields.SmallIntField(null=True)
97
107
  rounding_scale: int = fields.SmallIntField(null=True)
98
- # countries: fields.ManyToManyRelation[Country] = fields.ManyToManyField(
99
- # "models.Country", through="curexcountry", backward_key="curexs"
100
- # )
108
+ countries: fields.ManyToManyRelation[Country] = fields.ManyToManyField(
109
+ "models.Country", through="curexcountry", backward_key="curexs"
110
+ )
101
111
 
102
112
  class Meta:
103
113
  table_description = "Currency in Exchange"
@@ -109,7 +119,7 @@ class Coinex(BaseModel):
109
119
  ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex")
110
120
  minimum: float = fields.FloatField(null=True)
111
121
 
112
- exid: str = fields.CharField(31)
122
+ exid: str = fields.CharField(32)
113
123
  p2p: bool = fields.BooleanField(default=True)
114
124
 
115
125
  class Meta:
@@ -117,50 +127,75 @@ class Coinex(BaseModel):
117
127
  unique_together = (("ex_id", "coin_id"), ("ex_id", "exid"))
118
128
 
119
129
 
120
- class Pair(Model, TsTrait):
130
+ class Pair(Model):
121
131
  id = fields.SmallIntField(True)
122
132
  coin: fields.ForeignKeyRelation[Coin] = fields.ForeignKeyField("models.Coin", related_name="pairs")
123
133
  cur: fields.ForeignKeyRelation[Cur] = fields.ForeignKeyField("models.Cur", related_name="pairs")
134
+
135
+ _name = {"coin__ticker", "cur__ticker"}
136
+
137
+ class Meta:
138
+ table_description = "Coin/Currency pairs"
139
+ unique_together = (("coin", "cur"),)
140
+
141
+
142
+ class PairEx(Model, TsTrait):
143
+ pair: fields.ForeignKeyRelation[Pair] = fields.ForeignKeyField("models.Pair", related_name="pairexs")
144
+ pair_id: int
124
145
  fee: float = fields.FloatField(default=0)
125
146
  ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="pairs")
147
+ ex_id: int
126
148
  directions: fields.ReverseRelation["Direction"]
127
149
 
128
- _name = {"coin__ticker", "cur__ticker"}
150
+ _name = {"pair__coin__ticker", "pair__cur__ticker", "ex__name"}
129
151
 
130
152
  class Meta:
131
- table_description = "Coin/Currency pairs"
132
- unique_together = (("coin", "cur", "ex"),)
153
+ table_description = "Pairs on Exs"
154
+ unique_together = (("pair", "ex"),)
133
155
 
134
156
 
135
157
  class Direction(Model):
136
158
  id = fields.SmallIntField(True)
137
- pair: fields.ForeignKeyRelation[Pair] = fields.ForeignKeyField("models.Pair", related_name="directions")
159
+ pairex: fields.ForeignKeyRelation[PairEx] = fields.ForeignKeyField("models.PairEx", related_name="directions")
160
+ pairex_id: int
138
161
  sell: bool = fields.BooleanField()
139
162
  total: int = fields.IntField(null=True)
140
163
  ads: fields.ReverseRelation["Ad"]
141
164
 
142
- _name = {"pair__coin__ticker", "pair__cur__ticker", "sell"}
165
+ _name = {"pairex__coin__ticker", "pairex__cur__ticker", "sell"}
143
166
 
144
167
  class Meta:
145
168
  table_description = "Trade directions"
146
- unique_together = (("pair", "sell"),)
169
+ unique_together = (("pairex", "sell"),)
147
170
 
148
171
 
149
- class User(Model, TsTrait, UserInfoTrait):
150
- id: int = fields.BigIntField(True)
151
- forum: int = fields.BigIntField()
152
- role: Role = fields.IntEnumField(Role, default=Role.READER)
153
- status: UserStatus = fields.IntEnumField(UserStatus, default=UserStatus.RESTRICTED)
154
- username: str | None = fields.CharField(95, unique=True, null=True)
172
+ class Person(Model, TsTrait):
173
+ status: PersonStatus = fields.IntEnumField(PersonStatus, default=PersonStatus.DEFAULT)
174
+ name: str | None = fields.CharField(127, null=True)
175
+
176
+ user: fields.BackwardOneToOneRelation["User"]
177
+ creds: fields.BackwardFKRelation["Cred"]
178
+ actors: fields.BackwardFKRelation["Actor"]
179
+
180
+
181
+ class User(UserTg, TsTrait):
182
+ status: UserStatus = fields.IntEnumField(UserStatus, default=UserStatus.SLEEP)
183
+
184
+ person: fields.OneToOneRelation[Person] = fields.OneToOneField("models.Person", related_name="user")
185
+ person_id: int
155
186
  ref: fields.ForeignKeyNullableRelation["User"] = fields.ForeignKeyField(
156
187
  "models.User", related_name="proteges", null=True
157
188
  )
158
189
  ref_id: int | None
159
190
 
191
+ forum: fields.BackwardOneToOneRelation["Forum"]
192
+ created_forums: fields.BackwardFKRelation["Forum"]
160
193
  proteges: fields.BackwardFKRelation["User"]
161
- agents: fields.BackwardFKRelation["Agent"]
194
+ creds: fields.BackwardFKRelation["Cred"]
195
+ actors: fields.BackwardFKRelation["Actor"]
162
196
  # fiats: fields.BackwardFKRelation["Fiat"]
163
197
  limits: fields.BackwardFKRelation["Limit"]
198
+ msgs: fields.BackwardFKRelation["Msg"]
164
199
  # vpn: fields.BackwardOneToOneRelation["Vpn"]
165
200
  # invite_requests: fields.BackwardFKRelation["Invite"]
166
201
  # invite_approvals: fields.BackwardFKRelation["Invite"]
@@ -169,66 +204,64 @@ class User(Model, TsTrait, UserInfoTrait):
169
204
  # investments: fields.BackwardFKRelation["Investment"]
170
205
 
171
206
  async def free_assets(self):
172
- assets = await Asset.filter(agent__user_id=self.id).values("free", "coin__rate")
207
+ assets = await Asset.filter(agent__actor__person__user__id=self.id).values("free", "coin__rate")
173
208
  return sum(asset["free"] * asset["coin__rate"] for asset in assets)
174
209
 
175
210
  async def fiats_sum(self):
176
- fiats = await Fiat.filter(user=self).values("amount", "pmcur__cur__rate")
177
- return sum(fiat["amount"] * fiat["pmcur__cur__rate"] for fiat in fiats)
211
+ fiats = await Fiat.filter(cred__person__user__id=self.id).values("amount", "cred__pmcur__cur__rate")
212
+ return sum(fiat["amount"] * fiat["cred__pmcur__cur__rate"] for fiat in fiats)
178
213
 
179
214
  async def balance(self) -> float:
180
215
  return await self.free_assets() + await self.fiats_sum()
181
216
 
182
- def get_auth(self) -> AuthUser:
183
- return AuthUser.model_validate(self, from_attributes=True)
217
+ def name(self):
218
+ return f"{self.first_name} {self.last_name}".rstrip()
219
+
220
+ class PydanticMeta(Model.PydanticMeta):
221
+ max_recursion = 0
222
+ include = "role", "status"
223
+ # computed = ["balance"]
184
224
 
185
- # class PydanticMeta(Model.PydanticMeta):
186
- # max_recursion = 0
187
- # include = "role", "status"
188
- # computed = ["balance"]
225
+
226
+ class Forum(Model, TsTrait):
227
+ id: int = fields.BigIntField(True)
228
+ joined: bool = fields.BooleanField(default=False)
229
+ user: fields.OneToOneRelation[User] = fields.OneToOneField("models.User", "forum")
230
+ user_id: int
231
+ # created_by: fields.BackwardFKRelation[User] = fields.ForeignKeyField("models.User", "created_forums")
189
232
 
190
233
 
191
- class Contragent(Model):
234
+ class Actor(Model):
192
235
  exid: int = fields.BigIntField()
193
236
  name: int = fields.CharField(63)
194
- ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="contragents")
237
+ ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", related_name="actors")
195
238
  ex_id: int
196
- updated_at: datetime | None = DatetimeSecField(auto_now=True)
239
+ person: fields.ForeignKeyRelation[Person] = fields.ForeignKeyField("models.Person", related_name="actors")
240
+ person_id: int
197
241
 
198
242
  agent: fields.BackwardOneToOneRelation["Agent"]
199
- creds: fields.BackwardFKRelation["Cred"]
200
- my_ads: fields.BackwardFKRelation["Ad"]
243
+ ads: fields.BackwardFKRelation["Ad"]
201
244
  taken_orders: fields.BackwardFKRelation["Order"]
202
245
 
203
246
  class Meta:
204
- table_description = "Agents"
205
- unique_together = (("ex", "exid"),)
247
+ table_description = "Actors"
248
+ unique_together = (("ex", "exid"), ("ex", "person"))
206
249
 
207
250
 
208
251
  class Agent(Model, TsTrait):
209
- auth: dict[str, str] = fields.JSONField(null=True)
210
- contragent: fields.OneToOneRelation[Contragent] = fields.OneToOneField("models.Contragent", "agent")
211
- contragent_id: int
212
- user: fields.ForeignKeyRelation[User] = fields.ForeignKeyField("models.User", related_name="agents")
213
- user_id: int
214
- assets: fields.ReverseRelation["Asset"]
252
+ auth: dict[str, str] = fields.JSONField(default={})
253
+ actor: fields.OneToOneRelation[Actor] = fields.OneToOneField("models.Actor", "agent")
254
+ actor_id: int
215
255
 
216
- _name = {"contragent__name"}
217
-
218
- def balance(self) -> int:
219
- return sum(asset.free * (asset.coin.rate or 0) for asset in self.assets)
256
+ assets: fields.ReverseRelation["Asset"]
220
257
 
221
- class Meta:
222
- table_description = "Agents"
223
- unique_together = (("contragent", "user"),)
258
+ _name = {"actor__name"}
224
259
 
225
- class PydanticMeta(Model.PydanticMeta):
226
- # max_recursion = 3
227
- include = "id", "contragent__ex", "assets", "auth", "updated_at"
228
- computed = ["balance"]
260
+ # def balance(self) -> int:
261
+ # return sum(asset.free * (asset.coin.rate or 0) for asset in self.assets)
229
262
 
230
263
  def client(self):
231
- module_name = f"xync_client.{self.contragent.ex.name}.agent"
264
+ module_name = f"xync_client.{self.actor.ex.name}.agent"
232
265
  __import__(module_name)
233
266
  client = sys.modules[module_name].AgentClient
234
267
  return client(self)
@@ -242,20 +275,25 @@ class Agent(Model, TsTrait):
242
275
  # return client(self)
243
276
 
244
277
  def asset_client(self):
245
- module_name = f"xync_client.{self.contragent.ex.name}.asset"
278
+ module_name = f"xync_client.{self.actor.ex.name}.asset"
246
279
  __import__(module_name)
247
280
  client = sys.modules[module_name].AssetClient
248
281
  return client(self)
249
282
 
283
+ # class PydanticMeta(Model.PydanticMeta):
284
+ # max_recursion = 3
285
+ # include = "id", "actor__ex", "auth", "updated_at"
286
+ # computed = ["balance"]
250
287
 
251
- class Adpm(Model):
252
- ad: fields.ForeignKeyRelation["Ad"] = fields.ForeignKeyField("models.Ad")
253
- pm: fields.ForeignKeyRelation["Pm"] = fields.ForeignKeyField("models.Pm")
254
-
255
- _name = {"ad__id", "pm__name"}
256
288
 
257
- class Meta:
258
- table_description = "P2P Advertisements - Payment methods"
289
+ # class Adpm(Model):
290
+ # ad: fields.ForeignKeyRelation["Ad"] = fields.ForeignKeyField("models.Ad")
291
+ # pm: fields.ForeignKeyRelation["Pm"] = fields.ForeignKeyField("models.Pm")
292
+ #
293
+ # _name = {"ad__id", "pm__name"}
294
+ #
295
+ # class Meta:
296
+ # table_description = "P2P Advertisements - Payment methods"
259
297
 
260
298
 
261
299
  # class AdCred(Model):
@@ -269,16 +307,16 @@ class Adpm(Model):
269
307
 
270
308
 
271
309
  class Ad(Model, TsTrait):
272
- id: int = fields.BigIntField(True)
310
+ exid: int = fields.BigIntField()
273
311
  direction: fields.ForeignKeyRelation[Direction] = fields.ForeignKeyField("models.Direction", related_name="ads")
274
312
  price: float = fields.FloatField()
275
- max_fiat: float = fields.FloatField()
276
313
  min_fiat: float = fields.FloatField()
314
+ max_fiat: float = fields.FloatField()
277
315
  detail: str | None = fields.CharField(4095, null=True)
278
316
  auto_msg: str | None = fields.CharField(255, null=True)
279
- status: AdStatus = fields.IntEnumField(AdStatus, defaut=AdStatus.active)
317
+ status: AdStatus = fields.IntEnumField(AdStatus, default=AdStatus.active)
280
318
 
281
- maker: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "my_ads")
319
+ maker: fields.ForeignKeyRelation[Actor] = fields.ForeignKeyField("models.Actor", "my_ads")
282
320
  maker_id: int
283
321
 
284
322
  pms: fields.ManyToManyRelation["Pm"] = fields.ManyToManyField("models.Pm", through="adpm") # only root pms
@@ -286,7 +324,7 @@ class Ad(Model, TsTrait):
286
324
  orders: fields.ReverseRelation["Order"]
287
325
 
288
326
  _icon = "ad"
289
- _name = {"direction__pair__coin__ticker", "direction__pair__cur__ticker", "direction__sell", "price"}
327
+ _name = {"direction__pairex__coin__ticker", "direction__pairex__cur__ticker", "direction__sell", "price"}
290
328
 
291
329
  class Meta:
292
330
  table_description = "P2P Advertisements"
@@ -305,11 +343,17 @@ class Ad(Model, TsTrait):
305
343
 
306
344
 
307
345
  class Pm(Model):
308
- name: str = fields.CharField(63, unique=True)
309
- identifier: str | None = fields.CharField(63, unique=True, null=True)
310
- # type_: PmType | None = fields.IntEnumField(PmType, null=True)
311
- type_: int | None = fields.SmallIntField(null=True)
312
- logo: str | None = fields.CharField(127, null=True)
346
+ # name: str = fields.CharField(63) # mv to pmex cause it diffs on each ex
347
+ norm: str | None = fields.CharField(63)
348
+ acronym: str | None = fields.CharField(7, null=True)
349
+ country: fields.ForeignKeyRelation[Country] = fields.ForeignKeyField("models.Country", "pms", null=True)
350
+ alias: str | None = fields.CharField(63, null=True)
351
+ extra: str | None = fields.CharField(63, null=True)
352
+ ok: bool = fields.BooleanField(default=True)
353
+ bank: bool | None = fields.BooleanField(null=True)
354
+
355
+ typ: PmType | None = fields.IntEnumField(PmType, null=True)
356
+ logo: str | None = fields.CharField(119, null=True)
313
357
 
314
358
  ads: fields.ManyToManyRelation[Ad]
315
359
  curs: fields.ManyToManyRelation[Cur]
@@ -320,6 +364,7 @@ class Pm(Model):
320
364
 
321
365
  class Meta:
322
366
  table_description = "Payment methods"
367
+ unique_together = (("norm", "country_id"), ("alias", "country_id"))
323
368
 
324
369
  # class PydanticMeta(Model.PydanticMeta):
325
370
  # max_recursion = 3
@@ -351,17 +396,21 @@ class Pmcur(Model): # for fiat with no exs tie
351
396
 
352
397
 
353
398
  class Pmex(BaseModel): # existence pm in ex with no cur tie
354
- pm: fields.ForeignKeyRelation[Pm] = fields.ForeignKeyField("models.Pm", "pmexs")
355
- pm_id: int
356
399
  ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", "pmexs")
357
400
  ex_id: int
401
+ pm: fields.ForeignKeyRelation[Pm] = fields.ForeignKeyField("models.Pm", "pmexs")
402
+ pm_id: int
358
403
  exid: str = fields.CharField(63)
359
404
  name: str = fields.CharField(63)
405
+ name_: str = fields.CharField(63, null=True)
360
406
 
361
407
  banks: fields.BackwardFKRelation["PmexBank"]
362
408
 
363
409
  class Meta:
364
- unique_together = (("ex_id", "exid"),)
410
+ unique_together = (
411
+ ("ex", "exid"),
412
+ ("ex", "name_"),
413
+ ) # , ("ex", "pm"), ("ex", "name") # todo: tmp removed for HTX duplicates
365
414
 
366
415
 
367
416
  class PmexBank(BaseModel): # banks for SBP
@@ -370,18 +419,10 @@ class PmexBank(BaseModel): # banks for SBP
370
419
  exid: str = fields.CharField(63)
371
420
  name: str = fields.CharField(63)
372
421
 
373
- class Meta:
374
- unique_together = (("pmex", "exid"),)
375
-
376
-
377
- class CredBank(BaseModel): # banks for SBP
378
- pmexbank: fields.ForeignKeyRelation[PmexBank] = fields.ForeignKeyField("models.PmexBank", "credbanks")
379
- pmexbank_id: int
380
- cred: fields.ForeignKeyRelation["Cred"] = fields.ForeignKeyField("models.Cred", "credbanks")
381
- cred_id: int
422
+ creds: fields.ManyToManyRelation["Cred"]
382
423
 
383
424
  class Meta:
384
- unique_together = (("cred_id", "pmexbank_id"),)
425
+ unique_together = (("pmex", "exid"),)
385
426
 
386
427
 
387
428
  # class Pmcurex(BaseModel): # existence pm in ex for exact cur, with "blocked" flag
@@ -396,34 +437,45 @@ class CredBank(BaseModel): # banks for SBP
396
437
 
397
438
 
398
439
  class Cred(Model):
399
- exid: int = fields.BigIntField()
400
440
  pmcur: fields.ForeignKeyRelation[Pmcur] = fields.ForeignKeyField("models.Pmcur")
401
441
  pmcur_id: int
402
- # country: fields.ForeignKeyRelation[Country] = fields.ForeignKeyField("models.Country", related_name="fiats")
403
- # country_id: int
404
442
  detail: str = fields.CharField(127)
405
443
  name: str | None = fields.CharField(127, null=True)
406
- contragent: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "creds")
407
- contragent_id: int
444
+ person: fields.ForeignKeyRelation[Person] = fields.ForeignKeyField("models.Person", "creds")
445
+ person_id: int
446
+
447
+ banks: fields.ManyToManyRelation[PmexBank] = fields.ManyToManyField("models.PmexBank", related_name="creds")
408
448
 
409
449
  fiat: fields.BackwardOneToOneRelation["Fiat"]
410
- ads: fields.BackwardFKRelation[Ad]
450
+ ads: fields.ManyToManyRelation[Ad]
411
451
  orders: fields.BackwardFKRelation["Order"]
412
452
 
413
- _name = {"exid"}
453
+ _name = {"detail"}
414
454
 
415
455
  class Meta:
416
456
  table_description = "Currency accounts"
417
- unique_together = (("pmcur_id", "detail"), ("contragent", "exid"))
457
+ unique_together = (("person_id", "pmcur_id", "detail"),)
458
+
459
+
460
+ class CredEx(Model):
461
+ exid: int = fields.BigIntField()
462
+ cred: fields.ForeignKeyRelation[Cred] = fields.ForeignKeyField("models.Cred", "credexs")
463
+ cred_id: int
464
+ ex: fields.ForeignKeyRelation[Ex] = fields.ForeignKeyField("models.Ex", "credexs")
465
+ ex_id: int
466
+
467
+ _name = {"exid"}
468
+
469
+ class Meta:
470
+ table_description = "Credential on Exchange"
471
+ unique_together = (("ex", "exid"),)
418
472
 
419
473
 
420
474
  class Fiat(Model):
421
475
  cred: fields.OneToOneRelation[Cred] = fields.OneToOneField("models.Cred", "fiat")
422
476
  cred_id: int
423
- # user: fields.ForeignKeyRelation[User] = fields.ForeignKeyField("models.User", "fiats")
424
- # user_id: int # cred.contragent.agent.user_id
425
477
  amount: float | None = fields.FloatField(default=0)
426
- target: float | None = fields.FloatField(default=None, null=True)
478
+ target: float = fields.FloatField(default=0)
427
479
 
428
480
  class Meta:
429
481
  table_description = "Currency balances"
@@ -485,16 +537,16 @@ class Asset(Model):
485
537
 
486
538
 
487
539
  class Order(Model):
488
- id: int = fields.BigIntField(True)
540
+ exid: int = fields.BigIntField()
489
541
  ad: fields.ForeignKeyRelation[Ad] = fields.ForeignKeyField("models.Ad", related_name="ads")
490
542
  ad_id: int
491
543
  amount: float = fields.FloatField()
492
544
  cred: fields.ForeignKeyRelation[Cred] = fields.ForeignKeyField("models.Cred", related_name="orders", null=True)
493
545
  cred_id: int | None
494
- taker: fields.ForeignKeyRelation[Contragent] = fields.ForeignKeyField("models.Contragent", "taken_orders")
546
+ taker: fields.ForeignKeyRelation[Actor] = fields.ForeignKeyField("models.Actor", "taken_orders")
495
547
  taker_id: int
496
- maker_topic: int = fields.IntField()
497
- taker_topic: int = fields.IntField()
548
+ maker_topic: int = fields.IntField(null=True) # todo: remove nullability
549
+ taker_topic: int = fields.IntField(null=True)
498
550
  status: OrderStatus = fields.IntEnumField(OrderStatus)
499
551
  created_at: datetime | None = DatetimeSecField(auto_now_add=True)
500
552
  payed_at: datetime | None = DatetimeSecField(null=True)
@@ -537,7 +589,7 @@ class Msg(Model):
537
589
  txt: str = fields.CharField(255)
538
590
  read: bool = fields.BooleanField(default=False)
539
591
  media: str | None = fields.CharField(255, null=True)
540
- receiver: fields.ForeignKeyRelation[Agent] = fields.ForeignKeyField("models.Agent", related_name="msgs")
592
+ receiver: fields.ForeignKeyRelation[User] = fields.ForeignKeyField("models.User", related_name="msgs")
541
593
  order: fields.ForeignKeyRelation[Order] = fields.ForeignKeyField("models.Order", related_name="msgs")
542
594
 
543
595
  class PydanticMeta(Model.PydanticMeta):
xync_schema/types.py ADDED
@@ -0,0 +1,85 @@
1
+ from datetime import datetime
2
+ from pydantic import BaseModel, Field
3
+
4
+ from xync_schema.enums import AdStatus, OrderStatus
5
+ from xync_schema import models
6
+
7
+
8
+ class UnitEx(BaseModel):
9
+ exid: int | str
10
+ ticker: str
11
+ scale: int = None
12
+ rate: float | None = None
13
+
14
+
15
+ class CoinEx(UnitEx):
16
+ p2p: bool = None
17
+ minimum: float | None = None
18
+
19
+
20
+ class CurEx(UnitEx):
21
+ rounding_scale: int | None = None
22
+ minimum: int | None = None
23
+
24
+
25
+ class PmexBank(BaseModel):
26
+ # id: int | None = None
27
+ exid: str
28
+ name: str
29
+
30
+
31
+ # class Pmcur(Struct):
32
+ # id: int | None = None
33
+ # pm_id: int
34
+ # cur_id: int
35
+
36
+
37
+ class BaseAd(BaseModel):
38
+ price: float
39
+ exid: int | None = Field(alias="id")
40
+
41
+
42
+ class BaseAdIn(BaseAd):
43
+ min_fiat: float
44
+ max_fiat: float
45
+ direction: models.Direction
46
+ detail: str | None = None
47
+ auto_msg: str | None = None
48
+ status: AdStatus = AdStatus.active
49
+ maker: models.Actor = None
50
+ _unq = "exid", "maker", "direction"
51
+
52
+ class Config:
53
+ arbitrary_types_allowed = True
54
+
55
+
56
+ class AdBuyIn(BaseAdIn):
57
+ pms_: list[models.Pm]
58
+
59
+
60
+ class AdSaleIn(BaseAdIn):
61
+ creds_: list[models.Cred]
62
+
63
+
64
+ class BaseOrder(BaseModel):
65
+ id: int | None = None
66
+
67
+
68
+ class OrderIn(BaseModel):
69
+ exid: int
70
+ amount: float
71
+ created_at: datetime
72
+ ad: models.Ad
73
+ cred: models.Cred
74
+ taker: models.Actor
75
+ id: int = None
76
+ maker_topic: int | None = None
77
+ taker_topic: int | None = None
78
+ status: OrderStatus = OrderStatus.created
79
+ payed_at: datetime | None = None
80
+ confirmed_at: datetime | None = None
81
+ appealed_at: datetime | None = None
82
+ _unq = "id", "exid", "amount", "maker_topic", "taker_topic", "ad", "cred", "taker"
83
+
84
+ class Config:
85
+ arbitrary_types_allowed = True
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: xync-schema
3
- Version: 0.6.72
3
+ Version: 0.6.73
4
4
  Summary: XyncNet project database model schema
5
5
  Author-email: Mike Artemiev <mixartemev@gmail.com>
6
6
  License: EULA
@@ -8,9 +8,11 @@ Project-URL: Homepage, https://gitlab.com/xync/back/schema
8
8
  Project-URL: Repository, https://gitlab.com/xync/back/schema
9
9
  Requires-Python: >=3.11
10
10
  Description-Content-Type: text/markdown
11
- Requires-Dist: xtg-auth
11
+ Requires-Dist: xn-auth
12
+ Requires-Dist: python-dotenv
12
13
  Provides-Extra: dev
13
14
  Requires-Dist: build; extra == "dev"
15
+ Requires-Dist: pre-commit; extra == "dev"
14
16
  Requires-Dist: pytest-asyncio; extra == "dev"
15
17
  Requires-Dist: twine; extra == "dev"
16
18
 
@@ -0,0 +1,8 @@
1
+ xync_schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ xync_schema/enums.py,sha256=yNXG1ZMWKSrjS7kFMVUHpbruws5c_xO_UxswmQJPNOE,12547
3
+ xync_schema/models.py,sha256=eTntoo8t94H0OZyhaGczy2SffnUwdmqHtemrMv1M0_4,26870
4
+ xync_schema/types.py,sha256=jubMlsGkaLpv1QZrInP0sEKW8SgWa6TyHENDz8OEvDM,1737
5
+ xync_schema-0.6.73.dist-info/METADATA,sha256=Z2SYahYfz6A1BM48-lqNc3lmVVFlvG8p-qKy1HvlpE0,4055
6
+ xync_schema-0.6.73.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
7
+ xync_schema-0.6.73.dist-info/top_level.txt,sha256=jN8IBDfVY8b85Byyk8v0Gyj_0yLB8FO56WV4EvcXWY4,12
8
+ xync_schema-0.6.73.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
xync_schema/pydantic.py DELETED
@@ -1,159 +0,0 @@
1
- from datetime import datetime
2
- from pydantic import BaseModel, model_validator
3
-
4
- from xync_schema.enums import AdStatus, PmType
5
- from xync_schema.models import Direction, Pmcur, Ex, Cred, Contragent
6
-
7
-
8
- class _CurCoin(BaseModel):
9
- exid: int | str
10
- ticker: str
11
- rate: float | None = None
12
-
13
-
14
- class CoinEpyd(_CurCoin):
15
- p2p: bool = True
16
- minimum: float | None = None
17
-
18
-
19
- class CurEpyd(_CurCoin):
20
- rounding_scale: int | None = None
21
- minimum: int | None = None
22
-
23
-
24
- class PmexBankPyd(BaseModel):
25
- id: int | None = None
26
- exid: str
27
- name: str
28
-
29
-
30
- class PmPyd(BaseModel):
31
- id: int | None = None
32
- name: str
33
- identifier: str | None = None
34
- type_: PmType | None = None
35
- logo: str | None = None
36
- banks: list[PmexBankPyd] | None = None
37
-
38
-
39
- # class PmcurPyd(BaseModel):
40
- # id: int | None = None
41
- # pm_id: int
42
- # cur_id: int
43
-
44
-
45
- class FiatUpd(BaseModel):
46
- detail: str | None = None
47
- name: str | None = None
48
- amount: float | None = None
49
- target: int | None = None
50
-
51
-
52
- class FiatNew(FiatUpd):
53
- cur_id: int
54
- pm_id: int
55
- detail: str
56
- amount: float = 0
57
- target: int | None = None
58
-
59
-
60
- class CredPydIn(BaseModel):
61
- id: int | None = None
62
- exid: str
63
- ex: Ex | None = None
64
- ex_id: int | None = None
65
- pmcur_id: int | None = None
66
- pmcur: Pmcur | None = None
67
- detail: str
68
- name: str = ""
69
-
70
- class Config:
71
- arbitrary_types_allowed = True
72
-
73
- @classmethod
74
- @model_validator(mode="before")
75
- def check_at_least_one_field(cls, values):
76
- if (values.get("ex") or values.get("ex_id")) and (values.get("pmcur") or values.get("pmcur_id")):
77
- return values
78
- raise ValueError("ex(_id) and pmcur(_id) is required")
79
-
80
-
81
- class FiatPydIn(BaseModel):
82
- # unq
83
- id: int = None
84
- cred_id: int | None = None
85
- cred: Cred | None = None
86
- # df
87
- amount: float
88
- target: float | None = None
89
-
90
- banks: list[str] = []
91
-
92
- class Config:
93
- arbitrary_types_allowed = True
94
-
95
- @classmethod
96
- @model_validator(mode="before")
97
- def check_at_least_one_field(cls, values):
98
- if values.get("cred") or values.get("cred_id"):
99
- return values
100
- raise ValueError("cred(_id) is required")
101
-
102
- def args(self) -> tuple[dict, dict]:
103
- unq: tuple[str, ...] = "id", "cred_id", "cred"
104
- df: tuple[str, ...] = "amount", "target"
105
- d = self.model_dump()
106
- 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)}
107
-
108
-
109
- class BaseAd(BaseModel):
110
- id: int | None = None
111
- price: float
112
-
113
-
114
- class AdPydIn(BaseAd):
115
- min_fiat: float
116
- max_fiat: float | None = None
117
- detail: str | None = None
118
- auto_msg: str | None = None
119
- status: AdStatus = AdStatus.active
120
- maker_id: int | None = None
121
- maker: Contragent | None = None
122
- direction_id: int | None = None
123
- direction: Direction | None = None
124
- pms_: list | None = None
125
- fiats_: list | None = None
126
-
127
- class Config:
128
- arbitrary_types_allowed = True
129
-
130
- @classmethod
131
- @model_validator(mode="before")
132
- def check_at_least_one_field(cls, values):
133
- maker = values.get("maker") or values.get("maker_id")
134
- direction = values.get("direction") or values.get("direction_id")
135
- pms_or_fiats = values.get("pms_") or values.get("fiats_")
136
- if maker and direction and pms_or_fiats:
137
- return values
138
- raise ValueError("(pms or fiats) and maker(_id) and direction(_id) is required")
139
-
140
-
141
- class OrderPyd(BaseModel):
142
- id: int
143
- amount: float
144
- status: str
145
- actions: dict | None = {}
146
- cred: Cred.pyd()
147
- is_sell: bool
148
- contragent: int | None = None
149
- created_at: datetime
150
- payed_at: datetime | None = None
151
- appealed_at: datetime | None = None
152
- confirmed_at: datetime | None = None
153
- msgs: int = 0
154
- topic: int
155
-
156
-
157
- class UreadMsgs(BaseModel):
158
- order_id: int
159
- unread_cnt: int
@@ -1,8 +0,0 @@
1
- xync_schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- xync_schema/enums.py,sha256=7FDGQ2DYsNmvbTYvXGigsrI_9hOOiIN1J7RQyiV2TQ0,12300
3
- xync_schema/models.py,sha256=Ehs2Hs24OYIafTIUtyGrQt-4s5YMRX91YUF69ZFR1C8,25578
4
- xync_schema/pydantic.py,sha256=-7jx9KLv4KQ_7ChCxjoQ4d5MPi6yPCv9_nnooLk1nqQ,3882
5
- xync_schema-0.6.72.dist-info/METADATA,sha256=XbhoL5m5bue8QfrZH66Soycdc5Yyj0C70d09VUv1XWk,3985
6
- xync_schema-0.6.72.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
7
- xync_schema-0.6.72.dist-info/top_level.txt,sha256=jN8IBDfVY8b85Byyk8v0Gyj_0yLB8FO56WV4EvcXWY4,12
8
- xync_schema-0.6.72.dist-info/RECORD,,