5
5
6
6
import logging
7
7
import sys
8
- from argparse import ArgumentParser , Namespace
8
+ from argparse import ArgumentParser , BooleanOptionalAction , Namespace
9
+ from pathlib import Path
10
+ from typing import Optional
9
11
12
+ from moire .default import Default
10
13
from moire .moire import Moire
11
- import moire .default # noqa: F401
12
14
13
15
__author__ = "Sergey Vartanov"
14
16
15
17
16
18
17
- def main ():
19
+ def main (arguments : list [str ] = None , top_class = None ):
20
+
21
+ if not arguments :
22
+ arguments = sys .argv [1 :]
23
+ if not top_class :
24
+ top_class = Default
25
+
18
26
logging .basicConfig (level = logging .INFO , format = "%(message)s" )
19
27
20
28
parser : ArgumentParser = ArgumentParser ()
21
29
22
30
parser .add_argument ("-i" , "--input" , help = "Moire input file" , required = True )
23
31
parser .add_argument ("-o" , "--output" , help = "output file" )
24
32
parser .add_argument ("-f" , "--format" , help = "output format" , required = True )
33
+ parser .add_argument ("--wrap" , action = BooleanOptionalAction , default = True )
34
+
35
+ options : Namespace = parser .parse_args (arguments )
36
+
37
+ converter : Optional [Moire ] = None
38
+ for class_ in top_class .__subclasses__ ():
39
+ if class_ .id_ == options .format :
40
+ converter = class_ ()
25
41
26
- options : Namespace = parser .parse_args (sys .argv [1 :])
42
+ if not converter :
43
+ logging .fatal (
44
+ f"No converter class found for format `{ options .format } `."
45
+ )
46
+ exit (1 )
27
47
28
- with open (options .input , "r" ) as input_file :
29
- converter : Moire = getattr (
30
- sys .modules ["moire.default" ], options .format
31
- )()
48
+ with Path (options .input ).open () as input_file :
32
49
converter .file_name = options .input
33
- output : str = converter .convert (input_file .read ())
50
+ output : str = converter .convert (input_file .read (), wrap = options . wrap )
34
51
35
52
if not output :
36
- logging .fatal ("Fatal: output was no produced." )
53
+ logging .fatal ("No output was produced." )
37
54
sys .exit (1 )
38
55
39
56
if options .output :
@@ -45,4 +62,4 @@ def main():
45
62
46
63
47
64
if __name__ == "__main__" :
48
- main ()
65
+ main (sys . argv [ 1 :], Default )
0 commit comments