Skip to content

Commit 5fd873a

Browse files
committed
Rewrite entry point
`main()` function now has two parameters: arguments and top handler class.
1 parent b859e90 commit 5fd873a

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

moire/main.py

+28-11
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,52 @@
55

66
import logging
77
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
911

12+
from moire.default import Default
1013
from moire.moire import Moire
11-
import moire.default # noqa: F401
1214

1315
__author__ = "Sergey Vartanov"
1416
__email__ = "[email protected]"
1517

1618

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+
1826
logging.basicConfig(level=logging.INFO, format="%(message)s")
1927

2028
parser: ArgumentParser = ArgumentParser()
2129

2230
parser.add_argument("-i", "--input", help="Moire input file", required=True)
2331
parser.add_argument("-o", "--output", help="output file")
2432
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_()
2541

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)
2747

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:
3249
converter.file_name = options.input
33-
output: str = converter.convert(input_file.read())
50+
output: str = converter.convert(input_file.read(), wrap=options.wrap)
3451

3552
if not output:
36-
logging.fatal("Fatal: output was no produced.")
53+
logging.fatal("No output was produced.")
3754
sys.exit(1)
3855

3956
if options.output:
@@ -45,4 +62,4 @@ def main():
4562

4663

4764
if __name__ == "__main__":
48-
main()
65+
main(sys.argv[1:], Default)

0 commit comments

Comments
 (0)