Compare commits
12 Commits
Author | SHA1 | Date |
---|---|---|
Rémi TAUVEL | 6cd1af8888 | |
Rémi TAUVEL | 3ee080c88f | |
Rémi TAUVEL | 8dce72c01a | |
Rémi TAUVEL | 2cbe3f9632 | |
Rémi TAUVEL | 03d45dfbbd | |
Rémi TAUVEL | 442df05ea4 | |
Rémi TAUVEL | 3b220c6346 | |
Rémi TAUVEL | 9f06e1e761 | |
Rémi TAUVEL | 542460fab5 | |
Rémi TAUVEL | 5b811be84b | |
Rémi TAUVEL | f00dfea85b | |
Rémi TAUVEL | 2a2d0dbdbb |
|
@ -50,10 +50,10 @@ or
|
||||||
$ delarte --help
|
$ delarte --help
|
||||||
ArteTV dowloader.
|
ArteTV dowloader.
|
||||||
|
|
||||||
usage: delarte [-h|--help] - print this message
|
usage: delarte [-h|--help] - print this message
|
||||||
or: delarte program_page_url - show available versions
|
or: delarte program_page_url - show available versions
|
||||||
or: delarte program_page_url version - show available resolutions
|
or: delarte program_page_url version - show available resolutions
|
||||||
or: delarte program_page_url version resolution - download the given video
|
or: delarte program_page_url version resolution - download the given video
|
||||||
```
|
```
|
||||||
|
|
||||||
🔧 How it works
|
🔧 How it works
|
||||||
|
|
|
@ -17,6 +17,7 @@ from . import hls
|
||||||
from . import muxing
|
from . import muxing
|
||||||
from . import naming
|
from . import naming
|
||||||
from . import www
|
from . import www
|
||||||
|
from . import cli
|
||||||
|
|
||||||
|
|
||||||
def _fail(message, code=1):
|
def _fail(message, code=1):
|
||||||
|
@ -65,7 +66,9 @@ def create_progress():
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""CLI command."""
|
"""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":
|
if not args or args[0] == "-h" or args[0] == "--help":
|
||||||
print(__doc__)
|
print(__doc__)
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -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."""
|
|
@ -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