Techdocs / testing /pack /functools.py
HemanthSai7's picture
CLI testing complete
08fce87
import json
import requests
BASE_URL = 'https://caffeinecrew-techdocs.hf.space'
def get_access_token(data, return_refresh_token=False):
"""Authenticates and returns the access token.
Args:
data: dict. User login credentials.
Returns:
str. The access token.
"""
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):
"""Request for inference from an external model.
Args:
config: Config. Configuration dictionary with model credentials,
api key, and access token.
code_block: str. Code block for which inference is requested.
max_retries: int, optional. Number of retries to be made in case
of failure. Defaults to 1.
Returns:
str: Docstring generated from the model.
"""
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):
"""insert a single record or iterable of records to the database.
Args:
db_name (str): name of the database
coll_name (str): name of the collection
data (dict): data to be inserted
Returns:
An instance of class: pymongo.results.InsertOneResult or
pymongo.results.InsertManyResult
"""
with open(file_path, 'w', errors='ignore') as file:
file.write(docstr_code)
def issue_api_key(config):
"""Issues an API key for a valid user
Args:
config (dict): Config dictionary containing `username` and `access_token`
of the user.
Raises:
Exception: If API key generation fails.
"""
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):
"""Sends a request to the server to create a new user account.
Args:
config (dict): A dictionary containing the following keys:
- 'username': The username of the new user.
- 'email': The email address of the new user.
- 'password': The password of the new user.
Raises:
Exception: If the request fails or the status code is not 200.
"""
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)