wuenlp_tools.utils.api

 1from __future__ import annotations
 2
 3from time import sleep
 4from urllib.parse import urljoin
 5
 6import requests
 7from loguru import logger
 8from requests.auth import HTTPBasicAuth
 9
10from wuenlp_tools.keys import WUENLP_API_KEY
11from wuenlp_tools.config import get_api_base_url
12
13
14def query_wuenlp_api(url, headers=None, data=None, files=None):
15    # Handle relative URLs by combining with base URL
16    if not url.startswith(('http://', 'https://')):
17        if not url.startswith('/'):
18            url = '/' + url
19        base_url = get_api_base_url()
20        if not base_url.endswith('/'):
21            base_url += '/'
22        url = urljoin(base_url, url.lstrip('/'))
23
24    finished = False
25    while not finished:
26        try:
27            response = requests.post(url, data=data, headers=headers, auth=HTTPBasicAuth('wuenlp', WUENLP_API_KEY),
28                                     files=files)
29            if response.status_code == 401:
30                if WUENLP_API_KEY is None:
31                    logger.error(
32                        "HTTP Basic Auth Password is required, but not provided. Please enter a valid password:")
33                    password = input()
34                    WUENLP_API_KEY.data = password
35                else:
36                    logger.error("HTTP Basic Auth Password is invalid. Please enter a valid password:")
37                    password = input()
38                    WUENLP_API_KEY.data = password
39            else:
40                finished = True
41        except requests.exceptions.ConnectionError as e:
42            logger.debug(e)
43            logger.info("Waiting for backend to become available...")
44            sleep(10)
45
46    if response.status_code != 200:
47        raise RuntimeError(f"Error processing document: {response.status_code}, {response.text}")
48    return response
def query_wuenlp_api(url, headers=None, data=None, files=None):
15def query_wuenlp_api(url, headers=None, data=None, files=None):
16    # Handle relative URLs by combining with base URL
17    if not url.startswith(('http://', 'https://')):
18        if not url.startswith('/'):
19            url = '/' + url
20        base_url = get_api_base_url()
21        if not base_url.endswith('/'):
22            base_url += '/'
23        url = urljoin(base_url, url.lstrip('/'))
24
25    finished = False
26    while not finished:
27        try:
28            response = requests.post(url, data=data, headers=headers, auth=HTTPBasicAuth('wuenlp', WUENLP_API_KEY),
29                                     files=files)
30            if response.status_code == 401:
31                if WUENLP_API_KEY is None:
32                    logger.error(
33                        "HTTP Basic Auth Password is required, but not provided. Please enter a valid password:")
34                    password = input()
35                    WUENLP_API_KEY.data = password
36                else:
37                    logger.error("HTTP Basic Auth Password is invalid. Please enter a valid password:")
38                    password = input()
39                    WUENLP_API_KEY.data = password
40            else:
41                finished = True
42        except requests.exceptions.ConnectionError as e:
43            logger.debug(e)
44            logger.info("Waiting for backend to become available...")
45            sleep(10)
46
47    if response.status_code != 200:
48        raise RuntimeError(f"Error processing document: {response.status_code}, {response.text}")
49    return response