import json import requests BASE_URL = 'https://caffeinecrew-techdocs.hf.space' def get_access_token(data, return_refresh_token=False): """ This function sends a POST request to the specified URL to get an access token. Arguments: data (dict): A dictionary containing the credentials required for authentication. return_refresh_token (bool, optional): A flag to indicate if the refresh token should be returned. Defaults to False. Returns: str or tuple: If return_refresh_token is False, the function returns the access token as a string. If return_refresh_token is True, the function returns a tuple containing the access token and the refresh token. Raises: Exception: If an error occurs during the execution of the function, an Exception is raised. """ '\n This function sends a POST request to the specified URL to get an access token.\n \n Arguments:\n data (dict): A dictionary containing the credentials required for authentication.\n return_refresh_token (bool, optional): A flag to indicate if the refresh token should be returned. Defaults to False.\n \n Returns:\n str or tuple: If return_refresh_token is False, the function returns the access token as a string. If return_refresh_token is True, the function returns a tuple containing the access token and the refresh token.\n \n Raises:\n Exception: If an error occurs during the execution of the function, an Exception is raised.\n ' '\n This function sends a POST request to the specified URL to get an access token.\n \n Arguments:\n data (dict): A dictionary containing the credentials required for authentication.\n return_refresh_token (bool, optional): A flag to indicate if the refresh token should be returned. Defaults to False.\n \n Returns:\n str or tuple: If return_refresh_token is False, the function returns the access token as a string. If return_refresh_token is True, the function returns a tuple containing the access token and the refresh token.\n \n Raises:\n Exception: If an error occurs during the execution of the function, an Exception is raised.\n ' try: url = BASE_URL + '/auth/login' headers = {'accept': 'application/json'} data = json.dumps(data) response = requests.post(url, data=data, headers=headers) access_token = response.json()['access_token'] if return_refresh_token: refresh_token = response.json()['refresh_token'] return (access_token, refresh_token) return access_token except Exception as e: print('Invlaid Credentials') return None def request_inference(config, code_block, max_retries=1): """ Usage: request_inference(config, code_block, max_retries=1) Purpose: This function sends a POST request to the API server to perform code inference. Arguments: - config (dict): A dictionary containing the necessary authentication details like 'access_token', 'api_key' and 'username'. - code_block (str): The code block that needs to be inferenced. - max_retries (int, optional): The maximum number of times the function should retry in case of an error. Defaults to 1. Returns: - str: The docstring of the inferenced code block. Raises: - Exception: If the maximum number of retries (specified by max_retries) is reached and the API server still returns an error. """ "\nUsage: request_inference(config, code_block, max_retries=1)\n\nPurpose:\nThis function sends a POST request to the API server to perform code inference.\n\nArguments:\n- config (dict): A dictionary containing the necessary authentication details like 'access_token', 'api_key' and 'username'.\n- code_block (str): The code block that needs to be inferenced.\n- max_retries (int, optional): The maximum number of times the function should retry in case of an error. Defaults to 1.\n\nReturns:\n- str: The docstring of the inferenced code block.\n\nRaises:\n- Exception: If the maximum number of retries (specified by max_retries) is reached and the API server still returns an error.\n" "\nUsage: request_inference(config, code_block, max_retries=1)\n\nPurpose:\nThis function sends a POST request to the API server to perform code inference.\n\nArguments:\n- config (dict): A dictionary containing the necessary authentication details like 'access_token', 'api_key' and 'username'.\n- code_block (str): The code block that needs to be inferenced.\n- max_retries (int, optional): The maximum number of times the function should retry in case of an error. Defaults to 1.\n\nReturns:\n- str: The docstring of the inferenced code block.\n\nRaises:\n- Exception: If the maximum number of retries (specified by max_retries) is reached and the API server still returns an error.\n" if max_retries == 0: return None url = BASE_URL + '/api/inference' headers = {'accept': 'application/json', 'Authorization': f"Bearer {config['access_token']}"} code_input = code_block response = requests.post(url=url, headers=headers, data=json.dumps({'code_block': code_input, 'api_key': config['api_key']})) if response.status_code == 200: return response.json()['docstr'] else: data = {'username': config['username'], 'password': config['password']} print('Encountered error retrying...') config.update({'access_token': get_access_token(data)}) return request_inference(config, code_block, max_retries=max_retries - 1) def update_file(file_path, docstr_code): """ This function updates the docstring of a Python file. Arguments: file_path (str): The path of the Python file to be updated. docstr_code (str): The new docstring to be written to the file. Returns: None Raises: FileNotFoundError: If the specified file does not exist. IOError: If there is an error while writing to the file. """ '\n This function performs some operation on the given arguments.\n\n Arguments:\n arg1 (int): The first argument. A positive integer.\n arg2 (float): The second argument. A positive floating point number.\n arg3 (str): The third argument. A string containing only alphabets.\n arg4 (bool): The fourth argument. A boolean value.\n\n Returns:\n None\n\n Raises:\n TypeError: If any argument is not of the expected type.\n ValueError: If arg1 is less than or equal to zero, or if arg2 is not a positive number, or if arg3 contains any non-alphabetic character, or if arg4 is not a boolean value.\n ' '\n This function updates the docstring of a Python file.\n\n Arguments:\n file_path (str): The path of the Python file to be updated.\n docstr_code (str): The new docstring to be written to the file.\n\n Returns:\n None\n\n Raises:\n FileNotFoundError: If the specified file does not exist.\n IOError: If there is an error while writing to the file.\n ' with open(file_path, 'w', errors='ignore') as file: file.write(docstr_code) def issue_api_key(config): """ This function generates a new API key for the given user. Arguments: config: dict, A dictionary containing the user's configuration details. - access_token: str, The user's access token. - username: str, The user's username. Returns: None, Prints the new API key to the console. Raises: Exception, If the API key generation fails. The error message will be printed to the console. """ "\n This function generates a new API key for the given user.\n\n Arguments:\n config: dict, A dictionary containing the user's configuration details.\n - access_token: str, The user's access token.\n - username: str, The user's username.\n\n Returns:\n None, Prints the new API key to the console.\n\n Raises:\n Exception, If the API key generation fails. The error message will be printed to the console.\n\n " "\n This function generates a new API key for the given user.\n\n Arguments:\n config: A dictionary containing the user's configuration details.\n - access_token: str, The user's access token.\n - username: str, The user's username.\n\n Returns:\n None, prints the new API key to the console.\n\n Raises:\n Exception, If the API key generation fails. The error message will be printed to the console.\n " try: headers = {'accept': 'application/json', 'Authorization': f"Bearer {config['access_token']}"} response = requests.put(url=BASE_URL + '/auth/regenerate_api_key', headers=headers, data=json.dumps({'username': config['username']})) if response.status_code != 200: raise Exception('API Key Generation Failed') print(f"$ API_KEY:{response.json()['api_key']}") except Exception as e: print(f'$ {e}') def signup(config): """ This function is used to sign up a user with the provided configuration. Arguments: config: dict A dictionary containing the user's signup information. Returns: None Raises: Exception If the username or email already exists. If there's a general error during the sign up process. """ "\n This function is used to sign up a user with the provided configuration.\n\n Arguments:\n config: dict\n A dictionary containing the user's signup information.\n\n Returns:\n None\n\n Raises:\n Exception\n If the username or email already exists.\n If there's a general error during the sign up process.\n " '\ndef signup(config: dict) -> None:\n ' try: headers = {'accept': 'application/json'} response = requests.post(url=BASE_URL + '/auth/signup', headers=headers, data=json.dumps(config)) if response.status_code == 226: raise Exception('username or email already exists') elif response.status_code != 200: raise Exception('Something went wrong, please try again later') print('Signed up successfully, please issue a new `API_KEY` to continue') except Exception as e: print(e)