Compare commits

...

12 Commits

5 changed files with 132 additions and 5 deletions

View File

@ -50,10 +50,10 @@ or
$ delarte --help
ArteTV dowloader.
usage: delarte [-h|--help] - print this message
or: delarte program_page_url - show available versions
or: delarte program_page_url version - show available resolutions
or: delarte program_page_url version resolution - download the given video
usage: delarte [-h|--help] - print this message
or: delarte program_page_url - show available versions
or: delarte program_page_url version - show available resolutions
or: delarte program_page_url version resolution - download the given video
```
🔧 How it works

View File

@ -17,6 +17,7 @@ from . import hls
from . import muxing
from . import naming
from . import www
from . import cli
def _fail(message, code=1):
@ -65,7 +66,9 @@ def create_progress():
def main():
"""CLI command."""
args = sys.argv[1:]
parser = cli.Parser()
args = parser.get_args_as_list()
if not args or args[0] == "-h" or args[0] == "--help":
print(__doc__)
return 0

58
src/delarte/cli.py Normal file
View File

@ -0,0 +1,58 @@
# Licence: GNU AGPL v3: http://www.gnu.org/licenses/
# This file is part of [`delarte`](https://git.afpy.org/fcode/delarte.git)"""CLI arguments related module."""
"""
usage: delarte [-h|--help] - print this message
or: delarte program_page_url - show available versions
or: delarte program_page_url version - show available video resolutions
or: delarte program_page_url version resolution - download the given video
"""
import argparse
class Parser(argparse.ArgumentParser):
"""Parser responsible for parsing CLI arguments."""
def __init__(self):
"""Generate a parser."""
super().__init__(
description="downloads Arte's videos with subtitles",
epilog=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
self.add_argument(
"url",
help="url of Arte movie's webpage",
action="store",
type=str,
nargs="?",
)
self.add_argument(
"version",
help="one of the language code proposed by Arte",
action="store",
type=str,
nargs="?",
)
self.add_argument(
"resolution",
help="video resolution",
action="store",
type=str,
nargs="?",
)
def get_args_as_list(self):
"""Get arguments from CLI as a list.
Returns:
List: ordered list of arguments, None removed
"""
args_namespace = self.parse_args()
args_list = [
args_namespace.url,
args_namespace.version,
args_namespace.resolution,
]
return [arg for arg in args_list if arg is not None]

View File

@ -0,0 +1,4 @@
# Licence: GNU AGPL v3: http://www.gnu.org/licenses/
# This file is part of [`delarte`](https://git.afpy.org/fcode/delarte.git)
"""Test package."""

62
tests/tests_parser.py Normal file
View File

@ -0,0 +1,62 @@
# Licence: GNU AGPL v3: http://www.gnu.org/licenses/
# This file is part of [`delarte`](https://git.afpy.org/fcode/delarte.git)"""CLI arguments related module."""
"""Unit test for command-line args parser."""
from unittest import TestCase, mock
import argparse
from src.delarte.cli import Parser
class TestParser(TestCase):
"""Tests for args parser."""
def setUp(self):
"""Create a CLI Parser."""
self.parser = Parser()
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(
[
"https://www.arte.tv/en/videos/104001-000-A/clint-eastwood/",
"VOF-STMF",
"216p",
],
)
)
self.assertEqual(
args,
{
"version": "VOF-STMF",
"resolution": "216p",
"url": "https://www.arte.tv/en/videos/104001-000-A/clint-eastwood/",
},
)
@mock.patch(
"argparse.ArgumentParser.parse_args",
return_value=argparse.Namespace(
url="https://www.arte.tv/en/videos/104001-000-A/clint-eastwood/",
version="VOF-STMF",
resolution="216p",
),
)
def test_get_args_as_list(self, *mock_args):
"""Test the return method for listing arguments."""
args = self.parser.get_args_as_list()
self.assertEqual(
args,
[
"https://www.arte.tv/en/videos/104001-000-A/clint-eastwood/",
"VOF-STMF",
"216p",
],
)