Skip to content

Commit ee86233

Browse files
committed
Add --version option to CLI
1 parent aa50f37 commit ee86233

File tree

2 files changed

+46
-8
lines changed

2 files changed

+46
-8
lines changed

youtube_transcript_api/_cli.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
import argparse
2+
from importlib.metadata import PackageNotFoundError, version
23
from typing import List
34

4-
from .proxies import GenericProxyConfig, WebshareProxyConfig
5+
from ._api import FetchedTranscript, TranscriptList, YouTubeTranscriptApi
56
from .formatters import FormatterLoader
7+
from .proxies import GenericProxyConfig, WebshareProxyConfig
8+
69

7-
from ._api import YouTubeTranscriptApi, FetchedTranscript, TranscriptList
10+
def get_version():
11+
try:
12+
return version("youtube-transcript-api")
13+
except PackageNotFoundError:
14+
return "unknown"
815

916

1017
class YouTubeTranscriptCli:
@@ -99,6 +106,9 @@ def _parse_args(self):
99106
"other selenium based solutions do!"
100107
)
101108
)
109+
parser.add_argument(
110+
"--version", action="version", version=f"%(prog)s, version {get_version()}"
111+
)
102112
parser.add_argument(
103113
"--list-transcripts",
104114
action="store_const",

youtube_transcript_api/test/test_cli.py

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
import pytest
1+
import json
2+
import subprocess
3+
from importlib.metadata import PackageNotFoundError, version
24
from unittest import TestCase
3-
from unittest.mock import MagicMock
5+
from unittest.mock import MagicMock, patch
46

5-
import json
7+
import pytest
68

79
from youtube_transcript_api import (
8-
YouTubeTranscriptApi,
9-
VideoUnavailable,
1010
FetchedTranscript,
1111
FetchedTranscriptSnippet,
12+
VideoUnavailable,
13+
YouTubeTranscriptApi,
1214
)
1315
from youtube_transcript_api._cli import YouTubeTranscriptCli
1416

@@ -333,10 +335,36 @@ def test_run__generic_proxy_config(self):
333335
)
334336
def test_run__cookies(self):
335337
YouTubeTranscriptCli(
336-
("v1 v2 --languages de en " "--cookies blahblah.txt").split()
338+
("v1 v2 --languages de en --cookies blahblah.txt").split()
337339
).run()
338340

339341
YouTubeTranscriptApi.__init__.assert_any_call(
340342
proxy_config=None,
341343
cookie_path="blahblah.txt",
342344
)
345+
346+
def test_version_matches_metadata(self):
347+
"""
348+
`youtube_transcript_api --version` should return the same version as in the package metadata.
349+
"""
350+
expected_version_msg = (
351+
f"youtube_transcript_api, version {version('youtube-transcript-api')}"
352+
)
353+
354+
cli_version_msg = subprocess.run(
355+
["youtube_transcript_api", "--version"],
356+
capture_output=True,
357+
text=True,
358+
check=True,
359+
).stdout.strip()
360+
361+
assert (
362+
cli_version_msg == expected_version_msg
363+
), f"Expected version '{expected_version_msg}', but got '{cli_version_msg}'"
364+
365+
def test_get_version_package_not_found(self):
366+
with patch(
367+
"youtube_transcript_api._cli.version", side_effect=PackageNotFoundError
368+
):
369+
from youtube_transcript_api._cli import get_version
370+
assert get_version() == "unknown"

0 commit comments

Comments
 (0)