Update _cli.py

Add formats factory instance that uses the `parsed_args.format` arg to retrieve the formatter class, defaults to JSON if not passed or if given a bad/mistyped name.

Might consider error in the case of a bad name given. Shouldn't be too difficult to add that ability if its wanted.
This commit is contained in:
Chris Howell 2020-07-08 15:23:10 -07:00
parent b4592043dc
commit c78a37b115
1 changed files with 9 additions and 10 deletions

View File

@ -1,10 +1,9 @@
import json import json
import pprint
import argparse import argparse
from ._api import YouTubeTranscriptApi from ._api import YouTubeTranscriptApi
from .formatters import formats
class YouTubeTranscriptCli(): class YouTubeTranscriptCli():
@ -32,9 +31,11 @@ class YouTubeTranscriptCli():
except Exception as exception: except Exception as exception:
exceptions.append(exception) exceptions.append(exception)
return '\n\n'.join( Formatter = formats.get_formatter(parsed_args.format)
[str(exception) for exception in exceptions] results = Formatter.format(transcripts)
+ ([json.dumps(transcripts) if parsed_args.json else pprint.pformat(transcripts)] if transcripts else [])
return ''.join(
[str(exception) for exception in exceptions] + results
) )
def _fetch_transcript(self, parsed_args, proxies, cookies, video_id): def _fetch_transcript(self, parsed_args, proxies, cookies, video_id):
@ -98,11 +99,9 @@ class YouTubeTranscriptCli():
help='If this flag is set transcripts which have been manually created will not be retrieved.', help='If this flag is set transcripts which have been manually created will not be retrieved.',
) )
parser.add_argument( parser.add_argument(
'--json', '--format',
action='store_const', default=None,
const=True, help="Use this flag to set which parser format to use, default is 'json'",
default=False,
help='If this flag is set the output will be JSON formatted.',
) )
parser.add_argument( parser.add_argument(
'--translate', '--translate',