async def load_data_from_endpoint( data_endpoint: EndpointConfig, language: Optional[Text] = "en" ) -> "TrainingData": """Load training data from a URL.""" import requests if not utils.is_url(data_endpoint.url): raise requests.exceptions.InvalidURL(data_endpoint.url) try: response = await data_endpoint.request("get") response.raise_for_status() temp_data_file = io_utils.create_temporary_file(response.content, mode="w+b") training_data = _load(temp_data_file, language) return training_data except Exception as e: logger.warning(f"Could not retrieve training data from URL:\n{e}")
def _prepare_credentials_for_rasa_x(credentials_path: Optional[Text], rasa_x_url: Optional[Text] = None) -> Text: credentials_path = cli_utils.get_validated_path(credentials_path, "credentials", DEFAULT_CREDENTIALS_PATH, True) if credentials_path: credentials = io_utils.read_config_file(credentials_path) else: credentials = {} # this makes sure the Rasa X is properly configured no matter what if rasa_x_url: credentials["rasa"] = {"url": rasa_x_url} dumped_credentials = yaml.dump(credentials, default_flow_style=False) tmp_credentials = io_utils.create_temporary_file(dumped_credentials, "yml") return tmp_credentials
async def _pull_runtime_config_from_server( config_endpoint: Optional[Text], attempts: int = 60, wait_time_between_pulls: Union[int, float] = 5, keys: Iterable[Text] = ("endpoints", "credentials"), ) -> Optional[List[Text]]: """Pull runtime config from `config_endpoint`. Returns a list of paths to yaml dumps, each containing the contents of one of `keys`. """ while attempts: try: async with aiohttp.ClientSession() as session: async with session.get(config_endpoint) as resp: if resp.status == 200: rjs = await resp.json() try: return [ io_utils.create_temporary_file(rjs[k]) for k in keys ] except KeyError as e: cli_utils.print_error_and_exit( "Failed to find key '{}' in runtime config. " "Exiting.".format(e) ) else: logger.debug( "Failed to get a proper response from remote " "server. Status Code: {}. Response: '{}'" "".format(resp.status, await resp.text()) ) except aiohttp.ClientError as e: logger.debug(f"Failed to connect to server. Retrying. {e}") await asyncio.sleep(wait_time_between_pulls) attempts -= 1 cli_utils.print_error_and_exit( "Could not fetch runtime config from server at '{}'. " "Exiting.".format(config_endpoint) )
async def download_file_from_url(url: Text) -> Text: """Download a story file from a url and persists it into a temp file. Args: url: url to download from Returns: The file path of the temp file that contains the downloaded content. """ from rasa.nlu import utils as nlu_utils if not nlu_utils.is_url(url): raise InvalidURL(url) async with aiohttp.ClientSession() as session: async with session.get(url, raise_for_status=True) as resp: filename = io_utils.create_temporary_file(await resp.read(), mode="w+b") return filename
def dump_as_yaml_to_temporary_file(data: Dict) -> Optional[Text]: """Dump `data` as yaml to a temporary file.""" content = dump_yaml(data) return rasa_io_utils.create_temporary_file(content)