♻️ wrapped parser functions in a Parser object

This commit is contained in:
Rémi TAUVEL 2022-12-14 10:11:38 +01:00
parent f00dfea85b
commit 5b811be84b
4 changed files with 51 additions and 44 deletions

View File

@ -17,7 +17,7 @@ from . import hls
from . import muxing
from . import naming
from . import www
from .cli_parser import create_parser, get_args_as_list
from .cli_parser import CLIParser
def fail(message, code=1):
@ -69,8 +69,8 @@ def create_progress():
def main():
"""CLI command."""
parser = create_parser()
args = get_args_as_list(parser)
parser = CLIParser()
args = parser.get_args_as_list()
if not args or args[0] == "-h" or args[0] == "--help":
print(__doc__)

View File

@ -1,42 +1,43 @@
"""CLI arguments related module."""
import argparse
def create_parser() -> argparse.ArgumentParser:
"""return a parser for the script arguments
class CLIParser(argparse.ArgumentParser):
"""Parser responsible for parsing CLI arguments."""
Returns:
argparse.ArgumentParser: argument parser object dedicated to get arguments from CLI call
"""
parser = argparse.ArgumentParser()
parser.add_argument(
"url",
help="url of Arte movie's webpage",
action="store",
type=str,
)
parser.add_argument(
"-l",
"--languages",
help="one of the language code proposed by Arte",
required=False,
action="store",
type=str,
nargs="?",
)
parser.add_argument(
"-r",
"--resolution",
help="directory where the output files will be stored",
required=False,
action="store",
type=str,
nargs="?",
)
def __init__(self):
"""Generate a parser."""
super().__init__()
self.add_argument(
"url",
help="url of Arte movie's webpage",
action="store",
type=str,
)
self.add_argument(
"-l",
"--languages",
help="one of the language code proposed by Arte",
required=False,
action="store",
type=str,
nargs="?",
)
self.add_argument(
"-r",
"--resolution",
help="directory where the output files will be stored",
required=False,
action="store",
type=str,
nargs="?",
)
return parser
def get_args_as_list(self):
"""Get arguments from CLI as a list.
def get_args_as_list(parser):
parser.parse_args()
args_namespace = parser.parse_args()
return [args_namespace.url, args_namespace.languages, args_namespace.resolution]
Returns:
List: liste ordonnée des arguments
"""
args_namespace = self.parse_args()
return [args_namespace.url, args_namespace.languages, args_namespace.resolution]

View File

@ -0,0 +1 @@
"""Test package."""

View File

@ -1,21 +1,25 @@
"""test for command-line args parser
"""
"""Unit test for command-line args parser."""
from unittest import TestCase, mock
import argparse
from src.delarte.cli_parser import create_parser, get_args_as_list
from src.delarte.cli_parser import CLIParser
class TestCliParser(TestCase):
"""Tests for args parser."""
def setUp(self):
self.parser = create_parser()
"""Create a CLI Parser."""
self.parser = CLIParser()
def tearDown(self):
"""Delete the CLI Parser."""
self.parser = None
def test_args_parse(self):
"""Test this parser gets the arguments from CLI."""
args = vars(
self.parser.parse_args(
[
@ -45,7 +49,8 @@ class TestCliParser(TestCase):
),
)
def test_get_args_as_list(self, *mock_args):
args = get_args_as_list(self.parser)
"""Test the return method for listing arguments."""
args = self.parser.get_args_as_list()
self.assertEqual(
args,
[