diff --git a/net_api_generator/generator.py b/net_api_generator/generator.py index 26f8b4e194603ef4e623caa880a4ec93eae4973f..8ecb5d31878c1ce77965ada196e37d9f8c8ded16 100644 --- a/net_api_generator/generator.py +++ b/net_api_generator/generator.py @@ -106,9 +106,12 @@ def python(strict, output_dir): with open(os.path.join(output_dir, '__init__.py'), 'w+') as initfile: initfile.write(f"""### AUTOGENERATED import requests +import os from typing import Union from pprint import pformat +import logging +logger = logging.getLogger(__name__) # ExeccutionError is derived from ValueError to keep backward compatibility. class ExecutionError(ValueError): @@ -138,13 +141,28 @@ class APIEndpoint(object): class APISession(object): -\tdef __init__(self, endpoint: APIEndpoint): +\tdef __init__(self, endpoint: APIEndpoint, protocol: str='https', update_check: bool='NETDB_CLIENT_DISABLE_UPDATE_CHECK' not in os.environ): +\t\tself._build_version = '{loader.version_detail['numeric']}' \t\tself.session = requests.session() \t\tself.session.headers.update({{'Authorization': 'Bearer ' + endpoint.token}}) +\t\tself.api_root = f'{{protocol}}://{{endpoint.base_url}}' \t\tif 'www-net' in endpoint.base_url: -\t\t\tself.base_url = f'https://{{endpoint.base_url}}/api/{{endpoint.version}}' +\t\t\tself.base_url = f'{{self.api_root}}/api/{{endpoint.version}}' \t\telse: -\t\t\tself.base_url = f'https://{{endpoint.base_url}}/{{endpoint.version}}' +\t\t\tself.base_url = f'{{self.api_root}}/{{endpoint.version}}' +\t\ttry: +\t\t\tif update_check: +\t\t\t\tversions = requests.get(self.api_root).json()[0] +\t\t\t\tcur_v = None +\t\t\t\tref = [int(r) for r in endpoint.version.split('.')] +\t\t\t\tfor v in versions: +\t\t\t\t\tif v['major'] == ref[0] and v['minor'] == ref[1]: +\t\t\t\t\t\tif self._build_version != v['numeric']: +\t\t\t\t\t\t\tlogger.warning(f"This library was built for NETDB API version {{self._build_version}}, but API reports {{v['numeric']}}. Please consider updating. " +\t\t\t\t\t\t "(You can disable this message by setting NETDB_CLIENT_DISABLE_UPDATE_CHECK in your environment or passing update_check=False to APISession)") +\t\t\t\t\t\tbreak +\t\texcept: +\t\t\tpass \tdef execute_ta(self, ta: list, dry_mode: bool = False, dict_mode: bool = False, su_login_name: str = None) -> Union[list, dict]: \t\tres = self.session.post(f'{{self.base_url}}/wapi/transaction/execute?dry_mode={{str(dry_mode).lower()}}&dict_mode={{str(dict_mode).lower()}}{{"" if su_login_name is None else "&su_login_name="+su_login_name}}', json=ta) diff --git a/net_api_generator/loader.py b/net_api_generator/loader.py index d2847391ba8646029dad5aa69ff04a989dcfe883..443595854f6b4e3c949f072e861ea6ed3862b615 100644 --- a/net_api_generator/loader.py +++ b/net_api_generator/loader.py @@ -13,7 +13,7 @@ class Loader(object): api_host: str = 'api.netdb.scc.kit.edu' doku_host: str = 'doku.netdb.scc.kit.edu' api_version: str = '4.0' - version_detail: str = None + version_detail: dict = None base_dir: str = '' _auth: str = None sess: requests.Session = requests.Session()