aboutsummaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rw-r--r--main.py82
1 files changed, 48 insertions, 34 deletions
diff --git a/main.py b/main.py
index 4462192..b68d540 100644
--- a/main.py
+++ b/main.py
@@ -1,6 +1,5 @@
1from datetime import datetime 1from datetime import datetime
2import argparse 2import configargparse
3import configparser
4import psycopg2 3import psycopg2
5import os 4import os
6import sys 5import sys
@@ -80,31 +79,35 @@ def fetch_markets(pg_config, user):
80 for row in cursor: 79 for row in cursor:
81 yield row 80 yield row
82 81
83def parse_config(config_file): 82def parse_config(args):
84 config = configparser.ConfigParser() 83 pg_config = {
85 config.read(config_file) 84 "host": args.db_host,
85 "port": args.db_port,
86 "user": args.db_user,
87 "password": args.db_password,
88 "database": args.db_database,
89 }
90 del(args.db_host)
91 del(args.db_port)
92 del(args.db_user)
93 del(args.db_password)
94 del(args.db_database)
86 95
87 if "postgresql" not in config: 96 report_path = args.report_path
88 print("no configuration for postgresql in config file")
89 sys.exit(1)
90 97
91 if "app" in config and "report_path" in config["app"]: 98 if report_path is not None and not \
92 report_path = config["app"]["report_path"] 99 os.path.exists(report_path):
100 os.makedirs(report_path)
93 101
94 if not os.path.exists(report_path): 102 return pg_config
95 os.makedirs(report_path)
96 else:
97 report_path = None
98
99 return [config["postgresql"], report_path]
100 103
101def parse_args(argv): 104def parse_args(argv):
102 parser = argparse.ArgumentParser( 105 parser = configargparse.ArgumentParser(
103 description="Run the trade bot") 106 description="Run the trade bot.")
104 107
105 parser.add_argument("-c", "--config", 108 parser.add_argument("-c", "--config",
106 default="config.ini", 109 default="config.ini",
107 required=False, 110 required=False, is_config_file=True,
108 help="Config file to load (default: config.ini)") 111 help="Config file to load (default: config.ini)")
109 parser.add_argument("--before", 112 parser.add_argument("--before",
110 default=False, action='store_const', const=True, 113 default=False, action='store_const', const=True,
@@ -125,21 +128,32 @@ def parse_args(argv):
125 help="Do a different action than trading (add several times to chain)") 128 help="Do a different action than trading (add several times to chain)")
126 parser.add_argument("--parallel", action='store_true', default=True, dest="parallel") 129 parser.add_argument("--parallel", action='store_true', default=True, dest="parallel")
127 parser.add_argument("--no-parallel", action='store_false', dest="parallel") 130 parser.add_argument("--no-parallel", action='store_false', dest="parallel")
128 131 parser.add_argument("--report-db", action='store_true', default=True, dest="report_db",
129 args = parser.parse_args(argv) 132 help="Store report to database (default)")
130 133 parser.add_argument("--no-report-db", action='store_false', dest="report_db",
131 if not os.path.exists(args.config): 134 help="Don't store report to database")
132 print("no config file found, exiting") 135 parser.add_argument("--report-path", required=False,
133 sys.exit(1) 136 help="Where to store the reports (default: absent, don't store)")
134 137 parser.add_argument("--no-report-path", action='store_const', dest='report_path', const=None,
135 return args 138 help="Don't store the report to file (default)")
136 139 parser.add_argument("--db-host", default="localhost",
137def process(market_config, market_id, user_id, args, report_path, pg_config): 140 help="Host access to database (default: localhost)")
141 parser.add_argument("--db-port", default=5432,
142 help="Port access to database (default: 5432)")
143 parser.add_argument("--db-user", default="cryptoportfolio",
144 help="User access to database (default: cryptoportfolio)")
145 parser.add_argument("--db-password", default="cryptoportfolio",
146 help="Password access to database (default: cryptoportfolio)")
147 parser.add_argument("--db-database", default="cryptoportfolio",
148 help="Database access to database (default: cryptoportfolio)")
149
150 return parser.parse_args(argv)
151
152def process(market_config, market_id, user_id, args, pg_config):
138 try: 153 try:
139 market.Market\ 154 market.Market\
140 .from_config(market_config, args, 155 .from_config(market_config, args, market_id=market_id,
141 pg_config=pg_config, market_id=market_id, 156 pg_config=pg_config, user_id=user_id)\
142 user_id=user_id, report_path=report_path)\
143 .process(args.action, before=args.before, after=args.after) 157 .process(args.action, before=args.before, after=args.after)
144 except Exception as e: 158 except Exception as e:
145 print("{}: {}".format(e.__class__.__name__, e)) 159 print("{}: {}".format(e.__class__.__name__, e))
@@ -147,7 +161,7 @@ def process(market_config, market_id, user_id, args, report_path, pg_config):
147def main(argv): 161def main(argv):
148 args = parse_args(argv) 162 args = parse_args(argv)
149 163
150 pg_config, report_path = parse_config(args.config) 164 pg_config = parse_config(args)
151 165
152 if args.parallel: 166 if args.parallel:
153 import threading 167 import threading
@@ -159,7 +173,7 @@ def main(argv):
159 process_ = process 173 process_ = process
160 174
161 for market_id, market_config, user_id in fetch_markets(pg_config, args.user): 175 for market_id, market_config, user_id in fetch_markets(pg_config, args.user):
162 process_(market_config, market_id, user_id, args, report_path, pg_config) 176 process_(market_config, market_id, user_id, args, pg_config)
163 177
164if __name__ == '__main__': # pragma: no cover 178if __name__ == '__main__': # pragma: no cover
165 main(sys.argv[1:]) 179 main(sys.argv[1:])