clientset.py.jinja 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import base64
  2. from urllib.parse import urlparse
  3. from .generated_http_client import HTTPClient
  4. from typing import Optional
  5. {% for class_name in class_names %}
  6. from .generated_{{ class_name | to_snake_case }}_client import {{ class_name }}Client
  7. {%- endfor %}
  8. from gpustack.utils.network import use_proxy_env_for_url
  9. class ClientSet:
  10. def __init__(
  11. self,
  12. base_url: str,
  13. api_key: Optional[str] = None,
  14. username: Optional[str] = None,
  15. password: Optional[str] = None,
  16. headers: Optional[dict] = None,
  17. timeout: Optional[float] = 60.0,
  18. enable_cache: bool = True,
  19. ):
  20. if headers is None:
  21. headers = {}
  22. if api_key:
  23. headers["Authorization"] = f"Bearer {api_key}"
  24. elif username and password:
  25. base64_credentials = base64.b64encode(
  26. f"{username}:{password}".encode()
  27. ).decode()
  28. headers["Authorization"] = f"Basic {base64_credentials}"
  29. self.base_url = base_url
  30. self.headers = headers
  31. verify = None
  32. parsed_url = urlparse(base_url)
  33. if parsed_url.hostname == "127.0.0.1" and parsed_url.scheme == "https":
  34. verify = False
  35. use_proxy_env = use_proxy_env_for_url(base_url)
  36. http_client = (
  37. HTTPClient(
  38. base_url=base_url,
  39. verify_ssl=verify,
  40. httpx_args={"trust_env": use_proxy_env},
  41. )
  42. .with_headers(headers)
  43. .with_timeout(timeout)
  44. )
  45. self.http_client = http_client
  46. {% for class_name in class_names %}
  47. self.{{ class_name | to_underscore_plural }} = {{ class_name }}Client(
  48. http_client,
  49. enable_cache=enable_cache,
  50. )
  51. {%- endfor %}{{ "\n" }}