The following Python code uses the AWS SDK for Python (Boto) to retrieve all lexicons stored in an AWS Region. The example accepts a lexicon name as a command line parameter and fetches that lexicon only, printing out the tmp path where it has been saved locally.
The following code example uses default credentials stored in the AWS SDK configuration file. For information about creating the configuration file, see Setting up the AWS CLI.
For more information on this operation, see the reference for the GetLexicon
API.
from argparse import ArgumentParser
from os import path
from tempfile import gettempdir
from boto3 import Session
from botocore.exceptions import BotoCoreError, ClientError
# Define and parse the command line arguments
cli = ArgumentParser(description="GetLexicon example")
cli.add_argument("name", type=str, metavar="LEXICON_NAME")
arguments = cli.parse_args()
# Create a client using the credentials and region defined in the adminuser
# section of the AWS credentials and configuration files
session = Session(profile_name="adminuser")
polly = session.client("polly")
print(u"Fetching {0}...".format(arguments.name))
try:
# Fetch lexicon by name
response = polly.get_lexicon(Name=arguments.name)
except (BotoCoreError, ClientError) as error:
# The service returned an error, exit gracefully
cli.error(error)
# Get the lexicon data from the response
lexicon = response.get("Lexicon", {})
# Access the lexicon's content
if "Content" in lexicon:
output = path.join(gettempdir(), u"%s.pls" % arguments.name)
print(u"Saving to %s..." % output)
try:
# Save the lexicon contents to a local file
with open(output, "w") as pls_file:
pls_file.write(lexicon["Content"])
except IOError as error:
# Could not write to file, exit gracefully
cli.error(error)
else:
# The response didn't contain lexicon data, exit gracefully
cli.error("Could not fetch lexicons contents")
print("Done.")