diff options
Diffstat (limited to 'main.py')
-rw-r--r-- | main.py | 82 |
1 files changed, 48 insertions, 34 deletions
@@ -1,6 +1,5 @@ | |||
1 | from datetime import datetime | 1 | from datetime import datetime |
2 | import argparse | 2 | import configargparse |
3 | import configparser | ||
4 | import psycopg2 | 3 | import psycopg2 |
5 | import os | 4 | import os |
6 | import sys | 5 | import 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 | ||
83 | def parse_config(config_file): | 82 | def 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 | ||
101 | def parse_args(argv): | 104 | def 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", | |
137 | def 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 | |||
152 | def 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): | |||
147 | def main(argv): | 161 | def 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 | ||
164 | if __name__ == '__main__': # pragma: no cover | 178 | if __name__ == '__main__': # pragma: no cover |
165 | main(sys.argv[1:]) | 179 | main(sys.argv[1:]) |