Skip to content

Commit 226b108

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

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
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: 26 additions & 7 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 version
24
from unittest import TestCase
35
from unittest.mock import MagicMock
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

@@ -332,11 +334,28 @@ def test_run__generic_proxy_config(self):
332334
"working due to YouTube changes."
333335
)
334336
def test_run__cookies(self):
335-
YouTubeTranscriptCli(
336-
("v1 v2 --languages de en " "--cookies blahblah.txt").split()
337-
).run()
337+
YouTubeTranscriptCli(("v1 v2 --languages de en --cookies blahblah.txt").split()).run()
338338

339339
YouTubeTranscriptApi.__init__.assert_any_call(
340340
proxy_config=None,
341341
cookie_path="blahblah.txt",
342342
)
343+
344+
def test_version_matches_metadata(self):
345+
"""
346+
`youtube_transcript_api --version` should return the same version as in the package metadata.
347+
"""
348+
expected_version_msg = (
349+
f"youtube_transcript_api, version {version("youtube-transcript-api")}"
350+
)
351+
352+
cli_version_msg = subprocess.run(
353+
["youtube_transcript_api", "--version"],
354+
capture_output=True,
355+
text=True,
356+
check=True,
357+
).stdout.strip()
358+
359+
assert (
360+
cli_version_msg == expected_version_msg
361+
), f"Expected version '{expected_version_msg}', but got '{cli_version_msg}'"

0 commit comments

Comments
 (0)