experiments/babel/app/set_up/set_up.py (37 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json import logging import urllib import google.auth import google.auth.transport.requests as googlerequests import google.oauth2.id_token from config.default import Default, Voice from dotenv import load_dotenv load_dotenv(override=True) logging.basicConfig(level=logging.DEBUG) config = Default() class VoicesSetup: """Set up Journey Voices""" @staticmethod def init(): """initial population of voices""" return get_voices() def get_voices(): """ Calls the backend endpoint for the list of available Journey Voices Sets this as a state variable for downstream use (display on About page and on Settings page) """ split_url = urllib.parse.urlsplit(config.BABEL_ENDPOINT) VOICE_ENDPOINT = f"{split_url.scheme}://{split_url.netloc}/voices" # pylint: disable=invalid-name req = urllib.request.Request(VOICE_ENDPOINT) print(f"VOICE_ENDPOINT: {VOICE_ENDPOINT}") if "localhost" not in VOICE_ENDPOINT: logging.info("calling remote endpoint") credentials, config.PROJECT_ID = google.auth.default() credentials.refresh(googlerequests.Request()) urlinfo = urllib.parse.urlparse(VOICE_ENDPOINT) audience = f"{urlinfo.scheme}://{urlinfo.netloc}/" auth_req = google.auth.transport.requests.Request() id_token = google.oauth2.id_token.fetch_id_token(auth_req, audience) req.add_header("Authorization", f"Bearer {id_token}") else: logging.info("calling local endpoint") req.add_header("Content-Type", "application/json; charset=utf-8") response = urllib.request.urlopen(req) response_as_string = response.read().decode("utf-8") data = json.loads(response_as_string) logging.info("returned %s voices", len(data)) return [Voice(item) for item in data]