-
Notifications
You must be signed in to change notification settings - Fork 0
/
sync_balance.py
40 lines (33 loc) · 1.09 KB
/
sync_balance.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import argparse
import pathlib
from sqlalchemy.sql.functions import coalesce, sum as sqlsum
import toml
from iu.balance import Balance
from iu.context import session
from iu.order import Order
from iu.transaction import Transaction
from iu.web.wsgi import create_wsgi_app
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument('-c', '--config', type=pathlib.Path)
args = parser.parse_args()
with open(args.config, 'r') as f:
app = create_wsgi_app(toml.load(f))
app.test_request_context().__enter__()
session.query(Balance).update({
Balance.amount: session.query(
coalesce(sqlsum(Transaction.amount), 0)
).filter(
Transaction.user_id == Balance.user_id,
Transaction.currency == Balance.currency,
).as_scalar(),
Balance.locked_amount: session.query(
coalesce(sqlsum(Order.remaining_locked_amount), 0)
).filter(
Order.user_id == Balance.user_id,
Order.locking_currency == Balance.currency,
Order.active,
).as_scalar()
}, synchronize_session='fetch')
session.commit()