1
1
#!/usr/bin/env python3
2
- import os
3
2
4
- import uvloop
3
+ # should be called before everything else
4
+ def init_uvloop ():
5
+ import uvloop
6
+ uvloop .install ()
5
7
6
- uvloop . install ()
8
+ init_uvloop ()
7
9
10
+ import os
8
11
from proxy_py import settings
9
12
from processor import Processor
10
13
from server .proxy_provider_server import ProxyProviderServer
11
14
from statistics import statistics
12
15
from checkers .base_checker import BaseChecker
13
16
from tools import test_collector
14
-
15
17
import materialized_view_updater
16
18
import asyncio
17
19
import logging
20
22
import sys
21
23
22
24
23
-
24
25
test_collector_path = None
25
26
main_logger = None
26
27
@@ -37,11 +38,13 @@ def str_to_bool(value):
37
38
raise argparse .ArgumentTypeError ("Boolean value expected." )
38
39
39
40
cmd_parser = argparse .ArgumentParser ()
40
- cmd_parser .add_argument ("--debug" , type = str_to_bool , help = "override settings' debug value" )
41
+ cmd_parser .add_argument ("--debug" , type = str_to_bool ,
42
+ help = "override settings' debug value" )
43
+ cmd_parser .add_argument (
44
+ "--proxy-checking-timeout" , type = float , help = "override settings' proxy checking timeout"
45
+ )
41
46
cmd_parser .add_argument (
42
- "--proxy-checking-timeout" , type = float , help = "override settings' proxy checking timeout"
43
- )
44
- cmd_parser .add_argument ("--test-collector" , help = "test collector with a given path" )
47
+ "--test-collector" , help = "test collector with a given path" )
45
48
46
49
args = cmd_parser .parse_args ()
47
50
@@ -64,10 +67,10 @@ def prepare_loggers():
64
67
asyncio_logger_file_handler = logging .FileHandler ("logs/asyncio.log" )
65
68
asyncio_logger_file_handler .setLevel (logging .DEBUG )
66
69
asyncio_logger_file_handler .setFormatter (
67
- logging .Formatter (
68
- "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() - %(message)s"
69
- )
70
- )
70
+ logging .Formatter (
71
+ "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() - %(message)s"
72
+ )
73
+ )
71
74
asyncio_logger .addHandler (asyncio_logger_file_handler )
72
75
73
76
if settings .DEBUG :
@@ -85,10 +88,10 @@ def prepare_loggers():
85
88
logger_file_handler = logging .FileHandler ("logs/main.log" )
86
89
logger_file_handler .setLevel (logging .DEBUG )
87
90
logger_file_handler .setFormatter (
88
- logging .Formatter (
89
- "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() ~ %(message)s"
90
- )
91
- )
91
+ logging .Formatter (
92
+ "%(levelname)s ~ %(asctime)s ~ %(funcName)30s() ~ %(message)s"
93
+ )
94
+ )
92
95
93
96
main_logger .addHandler (logger_file_handler )
94
97
@@ -108,7 +111,7 @@ async def core():
108
111
proxy_processor .worker (),
109
112
statistics .worker (),
110
113
materialized_view_updater .worker (),
111
- ])
114
+ ])
112
115
BaseChecker .clean ()
113
116
return code
114
117
except KeyboardInterrupt :
@@ -123,13 +126,29 @@ async def core():
123
126
124
127
def server ():
125
128
proxy_provider_server = ProxyProviderServer (
126
- settings .PROXY_PROVIDER_SERVER_ADDRESS ['HOST' ],
127
- settings .PROXY_PROVIDER_SERVER_ADDRESS ['PORT' ],
128
- )
129
+ settings .PROXY_PROVIDER_SERVER_ADDRESS ['HOST' ],
130
+ settings .PROXY_PROVIDER_SERVER_ADDRESS ['PORT' ],
131
+ )
129
132
130
133
return proxy_provider_server .start (asyncio .get_event_loop ())
131
134
132
135
136
+ def print_help ():
137
+ print ("""Usage: ./main.py [COMMAND] [OPTION]...
138
+ Runs proxy_py
139
+
140
+ The commands are:
141
+
142
+ "core" - runs core part of the project (proxies parsing and processing)
143
+ "server" - runs server for providing API
144
+ "" - runs both
145
+
146
+ use ./main.py COMMAND --help to get more information
147
+
148
+ Project's page: https://github.com/DevAlone/proxy_py
149
+ """ )
150
+
151
+
133
152
def main ():
134
153
if len (sys .argv ) < 2 :
135
154
# run default configuration
@@ -143,10 +162,14 @@ def main():
143
162
144
163
command = sys .argv [1 ].strip ()
145
164
sys .argv = sys .argv [1 :]
146
- return {
147
- 'core' : lambda : asyncio .get_event_loop ().run_until_complete (core ()),
148
- 'server' : server ,
149
- }[command ]()
165
+ try :
166
+ return {
167
+ 'core' : lambda : asyncio .get_event_loop ().run_until_complete (core ()),
168
+ 'server' : server ,
169
+ }[command ]()
170
+ except KeyError :
171
+ print_help ()
172
+ return 0
150
173
151
174
152
175
if __name__ == "__main__" :
0 commit comments