forked from fcode/delarte
Compare commits
12 Commits
14b9c1bb11
...
6cd1af8888
Author | SHA1 | Date | |
---|---|---|---|
6cd1af8888 | |||
3ee080c88f | |||
8dce72c01a | |||
2cbe3f9632 | |||
03d45dfbbd | |||
442df05ea4 | |||
3b220c6346 | |||
9f06e1e761 | |||
542460fab5 | |||
5b811be84b | |||
f00dfea85b | |||
2a2d0dbdbb |
|
@ -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
|
||||
|
|
|
@ -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
58
src/delarte/cli.py
Normal 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]
|
|
@ -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
62
tests/tests_parser.py
Normal 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",
|
||||
],
|
||||
)
|
Loading…
Reference in New Issue
Block a user