-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommon.py
More file actions
185 lines (153 loc) · 5.59 KB
/
Copy pathcommon.py
File metadata and controls
185 lines (153 loc) · 5.59 KB
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
"""
This file holds things that the various programs have in common.
"""
import argparse
import logging
from iwi.core import WebEntity
from iwi.web import Links
from defaults import defaults
__all__ = ['CommonParser', 'OfflineParser', 'TripcodeParser',
'logger', 'parameters']
logger = logging.getLogger('')
logger.setLevel(logging.INFO)
default_handler = logging.StreamHandler(defaults['log_file'])
logger.addHandler(default_handler)
parameters = argparse.Namespace(**defaults)
class CommonParser (argparse.ArgumentParser):
"""
This is an ArgumentParser that adds common arguments based on the
default values.
"""
def __init__ (self, *args, **kwargs):
"""
Initializes an instance adding common arguments.
"""
super(CommonParser, self).__init__(*args, **kwargs)
self.add_argument (
'--cache-file',
metavar='file', type=str, default=defaults['cache_file'],
help='which file to use as cache, defaults to {cache_file}'.format (
**defaults
)
)
self.add_argument (
'--log-file',
metavar='file',
type=argparse.FileType('a'), default=defaults['log_file'],
help='log file, defaults to {log_file.name}'.format (
**defaults
)
)
self.add_argument (
'--num-threads',
metavar='n', type=int, default=defaults['num_threads'],
help='how many threads to use, defaults to {num_threads}'.format (
**defaults
)
)
self.add_argument (
'--debug',
action='store_false' if defaults['debug'] else 'store_true',
help='toggle debug information, defaults to {debug}'.format (
**defaults
)
)
self.add_argument (
'--https',
action='store_false' if defaults['https'] else 'store_true',
help='toggle HTTPS, defaults to {https}'.format (
**defaults
)
)
self.add_argument (
'--quiet',
action='store_false' if defaults['quiet'] else 'store_true',
help='toggle quiet mode, defaults to {quiet}'.format (
**defaults
)
)
def parse_args (self, args=None, parameters=parameters):
return super(CommonParser, self).parse_args (
args=args, namespace=parameters
)
def post_process (self, parameters=parameters):
"""
Acts on iwi based on parameter list after program has been ran.
"""
WebEntity.webcache.dump(parameters.cache_file)
def pre_process (self, parameters=parameters):
"""
Acts on iwi based on parameter list to set up program conditions.
"""
if parameters.debug:
logger.setLevel(logging.DEBUG)
if parameters.quiet:
logger.setLevel(logging.WARNING)
if parameters.https:
Links.scheme = 'https'
if parameters.log_file is not defaults['log_file']:
logger.removeHandler(default_handler)
logger.addHandler (
logging.StreamHandler (parameters.log_file)
)
WebEntity.webcache.load(parameters.cache_file)
def sanity_check (self, parameters=parameters):
"""
Returns whether the parameter list is insane or not.
"""
if parameters.debug and parameters.quiet:
logger.error('both --debug and --quiet set')
return True
return False
class OfflineParser (CommonParser):
"""
Adds handling for offline mode to the CommonParser.
"""
def __init__ (self, *args, **kwargs):
super(OfflineParser, self).__init__(*args, **kwargs)
self.add_argument (
'--offline',
action='store_false' if defaults['offline'] else 'store_true',
help='toggle offline mode, defaults to {offline}'.format (
**defaults
)
)
def post_process (self, parameters=parameters, force_cache_write=False):
"""
Acts on iwi based on parameter list after program has been ran.
"""
if not parameters.offline or force_cache_write:
WebEntity.webcache.dump(parameters.cache_file)
def pre_process (self, parameters=parameters):
"""
Acts on iwi based on parameter list to set up program conditions.
"""
super(OfflineParser, self).pre_process(parameters=parameters)
if parameters.offline:
WebEntity.webcache.set_offline_mode()
if (parameters.num_threads != defaults['num_threads'] and
parameters.num_threads != 1):
logger.warning (
'set --num-threads will be ignored due to offline mode'
)
parameters.num_threads = 1
class TripcodeParser (OfflineParser):
"""
Adds handling for tripcode databases to the OfflineParser.
"""
def __init__ (self, *args, **kwargs):
super(TripcodeParser, self).__init__(*args, **kwargs)
self.add_argument (
'--public-file',
metavar='file', type=str, default=defaults['public_file'],
help='database for tripcodes, defaults to {public_file}'.format (
**defaults
)
)
self.add_argument (
'--secure-file',
metavar='file', type=str, default=defaults['secure_file'],
help='database for tripcodes, defaults to {secure_file}'.format (
**defaults
)
)