-
Notifications
You must be signed in to change notification settings - Fork 14
/
cli_module.py
315 lines (249 loc) · 8.5 KB
/
cli_module.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
import logging
import sys
from enforce_typing import enforce_types
from pdr_backend.analytics.check_network import check_network_main
from pdr_backend.analytics.get_predictions_info import (
get_predictions_info_main,
get_predictoors_info_main,
get_traction_info_main,
)
from pdr_backend.cli.cli_arguments import (
do_help_long,
do_help_short,
get_arg_parser,
print_args,
)
from pdr_backend.deployer.deployer import main as deployer_main
from pdr_backend.dfbuyer.dfbuyer_agent import DFBuyerAgent
from pdr_backend.lake.etl import ETL
from pdr_backend.lake.gql_data_factory import GQLDataFactory
from pdr_backend.lake.ohlcv_data_factory import OhlcvDataFactory
from pdr_backend.payout.payout import do_ocean_payout, do_rose_payout
from pdr_backend.ppss.ppss import PPSS
from pdr_backend.pred_submitter.deploy import deploy_pred_submitter_mgr_contract
from pdr_backend.predictoor.predictoor_agent import PredictoorAgent
from pdr_backend.publisher.publish_assets import publish_assets
from pdr_backend.sim.multisim_engine import MultisimEngine
from pdr_backend.aimodel.plots_dash import arima_dash
from pdr_backend.sim.sim_dash import sim_dash
from pdr_backend.sim.sim_engine import SimEngine
from pdr_backend.trader.approach1.trader_agent1 import TraderAgent1
from pdr_backend.trader.approach2.trader_agent2 import TraderAgent2
from pdr_backend.trueval.trueval_agent import TruevalAgent
from pdr_backend.util.core_accounts import fund_accounts_with_OCEAN
from pdr_backend.util.currency_types import Eth
from pdr_backend.util.topup import topup_main
from pdr_backend.util.web3_accounts import (
create_accounts,
fund_accounts,
print_balances,
)
logger = logging.getLogger("cli")
@enforce_types
def _do_main():
if len(sys.argv) <= 1 or sys.argv[1] == "help":
do_help_short(0)
if sys.argv[1] == "help_long":
do_help_long(0)
func_name = f"do_{sys.argv[1]}"
func = globals().get(func_name)
if func is None:
do_help_long(1)
parser = get_arg_parser(func_name)
args, nested_args = parser.parse_known_args()
do_log_args = func_name != "do_print_balances"
if do_log_args:
print_args(args, nested_args)
func(args, nested_args)
# ========================================================================
# actual cli implementations. Given in same order as HELP_LONG
# do_help() is implemented in cli_arguments and imported, so nothing needed here
@enforce_types
def do_sim(args, nested_args=None):
ppss = PPSS(
yaml_filename=args.PPSS_FILE,
network="development",
nested_override_args=nested_args,
)
feedset = ppss.predictoor_ss.predict_train_feedsets[0]
if len(ppss.predictoor_ss.predict_train_feedsets) > 0:
logger.warning("Multiple predict feeds provided, using the first one")
sim_engine = SimEngine(ppss, feedset)
sim_engine.run()
@enforce_types
# pylint: disable=unused-argument
def do_predictoor(args, nested_args=None):
ppss = args.PPSS
agent = PredictoorAgent(ppss)
agent.run()
@enforce_types
# pylint: disable=unused-argument
def do_trader(args, nested_args=None):
ppss = args.PPSS
approach = args.APPROACH
if approach == 1:
agent = TraderAgent1(ppss)
elif approach == 2:
agent = TraderAgent2(ppss)
else:
raise ValueError(f"Unknown trader approach {approach}")
agent.run()
@enforce_types
def do_claim_OCEAN(args, nested_args=None):
ppss = PPSS(
yaml_filename=args.PPSS_FILE,
network="sapphire-mainnet",
nested_override_args=nested_args,
)
do_ocean_payout(ppss)
@enforce_types
def do_claim_ROSE(args, nested_args=None):
ppss = PPSS(
yaml_filename=args.PPSS_FILE,
network="sapphire-mainnet",
nested_override_args=nested_args,
)
do_rose_payout(ppss)
@enforce_types
def do_multisim(args, nested_args=None):
d = PPSS.constructor_dict(
yaml_filename=args.PPSS_FILE,
nested_override_args=nested_args,
)
multisim_engine = MultisimEngine(d=d)
multisim_engine.run()
@enforce_types
# pylint: disable=unused-argument
def do_deployer(args, nested_args=None):
deployer_main(args)
@enforce_types
# pylint: disable=unused-argument
def do_lake(args, nested_args=None):
ppss = args.PPSS
ohlcv_data_factory = OhlcvDataFactory(ppss.lake_ss)
df = ohlcv_data_factory.get_mergedohlcv_df()
print(df)
@enforce_types
# pylint: disable=unused-argument
def do_analytics(args, nested_args=None):
"""
@description
This runs all dependencies to build analytics
All raw, clean, and aggregate data will be generated
1. All subgraph data will be fetched
2. All analytic data will be built
3. Lake contains all required data
4. Dashboards read from lake
Please use nested_args to control lake_ss
ie: st_timestr, fin_timestr, parquet_dir
"""
ppss = args.PPSS
gql_data_factory = GQLDataFactory(ppss)
etl = ETL(ppss, gql_data_factory)
etl.do_etl()
@enforce_types
# pylint: disable=unused-argument
def do_get_predictoors_info(args, nested_args=None):
"""
@description
The following args are post-lake filters:
ST = Start time string (e.g. "2021-01-01")
END = End time string (e.g. "2022-01-01")
PDRS = List of predictoor addresses to filter on (e.g. ["0x1", "0x2"])
"""
ppss = args.PPSS
pdrs = args.PDRS or []
get_predictoors_info_main(ppss, args.ST, args.END, pdrs)
@enforce_types
# pylint: disable=unused-argument
def do_get_predictions_info(args, nested_args=None):
"""
@description
The following args are post-lake filters:
ST = Start time string (e.g. "2021-01-01")
END = End time string (e.g. "2022-01-01")
PDRS = List of feed addresses to filter on (e.g. ["0x1", "0x2"])
"""
ppss = args.PPSS
feeds = args.FEEDS or []
get_predictions_info_main(ppss, args.ST, args.END, feeds)
@enforce_types
# pylint: disable=unused-argument
def do_get_traction_info(args, nested_args=None):
"""
@description
PQDIR = overrides lake parquet dir
The following args are post-lake filters:
ST = Start time string (e.g. "2021-01-01")
END = End time string (e.g. "2022-01-01")
"""
ppss = args.PPSS
ppss.lake_ss.d["parquet_dir"] = args.PQDIR
get_traction_info_main(ppss, args.ST, args.END)
@enforce_types
# pylint: disable=unused-argument
def do_check_network(args, nested_args=None):
ppss = args.PPSS
check_network_main(ppss, args.LOOKBACK_HOURS)
@enforce_types
# pylint: disable=unused-argument
def do_trueval(args, nested_args=None, testing=False):
ppss = args.PPSS
predictoor_batcher_addr = ppss.web3_pp.get_address("PredictoorHelper")
agent = TruevalAgent(ppss, predictoor_batcher_addr)
agent.run(testing)
@enforce_types
# pylint: disable=unused-argument
def do_dfbuyer(args, nested_args=None):
ppss = args.PPSS
agent = DFBuyerAgent(ppss)
agent.run()
@enforce_types
# pylint: disable=unused-argument
def do_publisher(args, nested_args=None):
ppss = args.PPSS
if ppss.web3_pp.network == "development":
fund_accounts_with_OCEAN(ppss.web3_pp)
publish_assets(ppss.web3_pp, ppss.publisher_ss)
@enforce_types
# pylint: disable=unused-argument
def do_topup(args, nested_args=None):
ppss = args.PPSS
topup_main(ppss)
@enforce_types
# pylint: disable=unused-argument
def do_create_accounts(args, nested_args=None):
create_accounts(args.NUM)
@enforce_types
# pylint: disable=unused-argument
def do_print_balances(args, nested_args=None):
ppss = args.PPSS
account = args.ACCOUNT
print_balances(account, ppss.web3_pp)
@enforce_types
# pylint: disable=unused-argument
def do_fund_accounts(args, nested_args=None):
ppss = args.PPSS
to_accounts = args.ACCOUNTS
fund_accounts(Eth(args.TOKEN_AMOUNT), to_accounts, ppss.web3_pp, args.NATIVE_TOKEN)
@enforce_types
# pylint: disable=unused-argument
def do_deploy_pred_submitter_mgr(args, nested_args=None):
ppss = args.PPSS
contract_address = deploy_pred_submitter_mgr_contract(ppss.web3_pp)
logger.info(
"Prediction Submitter Manager Contract deployed at %s", contract_address
)
@enforce_types
# pylint: disable=unused-argument
def do_sim_plots(args, nested_args=None):
sim_dash(args)
@enforce_types
# pylint: disable=unused-argument
def do_arima_plots(args, nested_args=None):
ppss = PPSS(
yaml_filename=args.PPSS_FILE,
network="development",
nested_override_args=nested_args,
)
arima_dash(ppss)