Skip to content
Snippets Groups Projects
Verified Commit 535c68b4 authored by Janis Streib's avatar Janis Streib :owl:
Browse files

ADD: python: update check

parent 4e0a8bf2
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment