scoped_api_client.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from services.api_client import JsonTransport
  2. class ScopedApiClient:
  3. def __init__(self, base_url, transport=None, timeout=10):
  4. self.base_url = (base_url or '').rstrip('/')
  5. self.transport = transport or JsonTransport()
  6. self.timeout = int(timeout)
  7. def call_tool(self, token, tool_code, route_path, payload, request_id, client_ip=''):
  8. token = str(token or '').strip()
  9. if not token:
  10. raise RuntimeError('mcp token missing')
  11. url = self.base_url + '/' + route_path.lstrip('/')
  12. headers = {
  13. 'Authorization': 'Bearer {0}'.format(token),
  14. 'X-MCP-Tool-Code': tool_code,
  15. 'X-Request-Id': request_id,
  16. }
  17. client_ip = str(client_ip or '').strip()
  18. if client_ip:
  19. headers['X-MCP-Client-IP'] = client_ip
  20. return self.transport.post_json(url, payload, headers, self.timeout)
  21. def list_enabled_tools(self, token, request_id=''):
  22. token = str(token or '').strip()
  23. if not token:
  24. raise RuntimeError('mcp token missing')
  25. url = self.base_url + '/mcp/tools/listEnabledTools'
  26. headers = {
  27. 'Authorization': 'Bearer {0}'.format(token),
  28. 'X-Request-Id': str(request_id or '').strip(),
  29. }
  30. return self.transport.post_json(url, {}, headers, self.timeout)
  31. def upload_headhaul_document(
  32. self,
  33. token,
  34. upload_token,
  35. filename,
  36. file_bytes,
  37. content_type='',
  38. request_id='',
  39. client_ip='',
  40. ):
  41. token = str(token or '').strip()
  42. if not token:
  43. raise RuntimeError('mcp token missing')
  44. url = self.base_url + '/mcp/tools/uploadHeadhaulDocument'
  45. headers = {
  46. 'Authorization': 'Bearer {0}'.format(token),
  47. 'X-MCP-Tool-Code': 'prepare_headhaul_document_upload',
  48. 'X-Request-Id': str(request_id or '').strip(),
  49. }
  50. client_ip = str(client_ip or '').strip()
  51. if client_ip:
  52. headers['X-MCP-Client-IP'] = client_ip
  53. return self.transport.post_multipart(
  54. url,
  55. {'upload_token': upload_token},
  56. {
  57. 'file': (
  58. filename,
  59. file_bytes,
  60. content_type or 'application/octet-stream',
  61. ),
  62. },
  63. headers,
  64. max(self.timeout, 120),
  65. )