Files
tatt/transcribe.py

92 lines
2.8 KiB
Python

import json
from pprint import pprint
import sqlite3
import sys
import click
import config
import exceptions
import helpers
from tatt import vendors
@click.group()
def cli():
pass
@cli.command()
@click.option('-f', '--file', is_flag=True, help='save to file')
@click.argument('name')
def get(name, file):
"""Downloads and/or saves completed transcript."""
job = helpers.get_transcription_jobs_dict().get(name)
if not job:
raise click.ClickException(f'no such transcript {name}')
if job['status'].lower() != 'completed':
raise click.ClickException(f'transcript status is {job["status"]}')
service = helpers.get_service(job['service_name'])
if not file:
pprint(service.retrieve_transcript(name))
with open(f'{name}.json', 'w') as fout:
fout.write(json.dumps(service.retrieve_transcript(name)))
print(f'Okay, downloaded {name}.json')
@cli.command()
@click.option('-n', '--name', type=str, help="transcription job name")
@click.option('--service', type=str, help="STT service name")
@click.option('--status', type=str, help="completed | failed | in_progress")
def list(name, service, status):
"""Lists available STT services."""
if service is not None and service not in config.STT_SERVICES:
raise click.ClickException(f'no such service: {service}')
all_jobs = helpers.get_transcription_jobs(service, name, status)
if not all_jobs:
click.ClickException('no transcripts currently!')
helpers.print_transcription_jobs(all_jobs)
@cli.command()
@click.option('-f', '--free-only', is_flag=True, help='only free services')
def services(free_only):
"""Lists available speech-to-text services."""
helpers.print_all_services(free_only)
@cli.command()
@click.option('-d', '--dry-run', is_flag=True, help=(
'Do a dry run without actually submitting the media file for transcription'))
@click.argument('media_filepath', type=str)
@click.argument('service_name', type=str)
def this(dry_run, media_filepath, service_name):
"""Sends a media file to be transcribed."""
if service_name not in config.STT_SERVICES:
print()
raise click.ClickException(
f'No such service! {print_all_services(print_=False)}')
service = helpers.get_service(service_name)
s = service(media_filepath)
if dry_run:
print('If this weren\'t a dry run, I would transcribe '
f'{media_filepath} using {service_name}')
pprint(vars(s))
else:
print(
f'Okay, transcribing {media_filepath} using {service_name}...')
try:
job_num = s.transcribe()
except exceptions.AlreadyExistsError as e:
raise click.ClickException(str(e))
print(f'Okay, job {job_num} is being transcribed. Use "get" '
'command to download it.')