import requests import logging import json import os AUTH_TOKEN = {'Authorization': f'Bearer {os.environ.get("API_TOKEN")}'} DB_URL = 'http://pd-database/api' master_debug = True alt_database = None if alt_database == 'prod': DB_URL = 'https://sombaseball.ddns.net/pd/api' elif alt_database == 'local': DB_URL = 'https://manticorum.ddns.net/pd/api' def param_char(other_params): if other_params: return '&' else: return '?' def get_req_url(endpoint: str, api_ver: int = 1, object_id: int = None, params: list = None): req_url = f'{DB_URL}/v{api_ver}/{endpoint}{"/" if object_id is not None else ""}{object_id if object_id is not None else ""}' if params: other_params = False for x in params: req_url += f'{param_char(other_params)}{x[0]}={x[1]}' other_params = True return req_url def db_get(endpoint: str, api_ver: int = 1, object_id: int = None, params: list = None, none_okay: bool = True, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id, params=params) log_string = f'get:\n{endpoint} id: {object_id} params: {params}' logging.info(log_string) if master_debug else logging.debug(log_string) try: resp = requests.get(req_url, timeout=timeout) except requests.ReadTimeout as e: logging.error(f'Read Timeout: {e}') raise ConnectionError(f'DB: The internet was a bit too slow for me to grab the data I needed. Please ' f'hang on a few extra seconds and try again.') if resp.status_code == 200: data = resp.json() log_string = f'{data}' if master_debug: logging.info(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') else: logging.debug(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') return data elif none_okay: data = resp.json() log_string = f'{data}' if master_debug: logging.info(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') else: logging.debug(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') return None else: logging.warning(resp.text) raise ValueError(f'DB: {resp.text}') def db_patch(endpoint: str, object_id: int, params: list, api_ver: int = 1, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id, params=params) log_string = f'patch:\n{endpoint} {params}' logging.info(log_string) if master_debug else logging.debug(log_string) try: resp = requests.patch(req_url, headers=AUTH_TOKEN, timeout=timeout) except requests.ReadTimeout as e: logging.error(f'Read Timeout: {e}') raise ConnectionError(f'DB: The internet was a bit too slow for me to grab the data I needed. Please ' f'hang on a few extra seconds and try again.') if resp.status_code == 200: data = resp.json() log_string = f'{data}' if master_debug: logging.info(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') else: logging.debug(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') return data else: logging.warning(resp.text) raise ValueError(f'DB: {resp.text}') def db_post(endpoint: str, api_ver: int = 1, payload: dict = None, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver) log_string = f'post:\n{endpoint} payload: {payload}\ntype: {type(payload)}' logging.info(log_string) if master_debug else logging.debug(log_string) try: resp = requests.post(req_url, json=payload, headers=AUTH_TOKEN, timeout=timeout) except requests.ReadTimeout as e: logging.error(f'Read Timeout: {e}') raise ConnectionError(f'DB: The internet was a bit too slow for me to grab the data I needed. Please ' f'hang on a few extra seconds and try again.') if resp.status_code == 200: data = resp.json() log_string = f'{data}' if master_debug: logging.info(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') else: logging.debug(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') return data else: logging.warning(resp.text) raise ValueError(f'DB: {resp.text}') def db_delete(endpoint: str, object_id: int, api_ver: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id) log_string = f'delete:\n{endpoint} {object_id}' logging.info(log_string) if master_debug else logging.debug(log_string) try: resp = requests.delete(req_url, headers=AUTH_TOKEN, timeout=3) except requests.ReadTimeout as e: logging.error(f'Read Timeout: {e}') raise ConnectionError(f'DB: The internet was a bit too slow for me to grab the data I needed. Please ' f'hang on a few extra seconds and try again.') if resp.status_code == 200: data = resp.json() log_string = f'{data}' if master_debug: logging.info(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') else: logging.debug(f'return: {log_string[:1200]}{" [ S N I P P E D ]" if len(log_string) > 1200 else ""}') return True else: logging.warning(resp.text) raise ValueError(f'DB: {resp.text}') def get_team_by_abbrev(abbrev: str): all_teams = db_get('teams', params=[('abbrev', abbrev)]) if not all_teams or not all_teams['count']: return None return all_teams['teams'][0] def post_to_dex(player, team): return db_post('paperdex', payload={'team_id': team['id'], 'player_id': player['id']}) def team_hash(team): hash_string = f'{team["abbrev"]}{team["gmid"] / 123:.0f}' return hash(hash_string)