openweather.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import requests
  2. from core.tools.errors import ToolProviderCredentialValidationError
  3. from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
  4. def query_weather(city="Beijing", units="metric", language="zh_cn", api_key=None):
  5. url = "https://api.openweathermap.org/data/2.5/weather"
  6. params = {"q": city, "appid": api_key, "units": units, "lang": language}
  7. return requests.get(url, params=params)
  8. class OpenweatherProvider(BuiltinToolProviderController):
  9. def _validate_credentials(self, credentials: dict) -> None:
  10. try:
  11. if "api_key" not in credentials or not credentials.get("api_key"):
  12. raise ToolProviderCredentialValidationError(
  13. "Open weather API key is required."
  14. )
  15. apikey = credentials.get("api_key")
  16. try:
  17. response = query_weather(api_key=apikey)
  18. if response.status_code == 200:
  19. pass
  20. else:
  21. raise ToolProviderCredentialValidationError(
  22. (response.json()).get("info")
  23. )
  24. except Exception as e:
  25. raise ToolProviderCredentialValidationError(
  26. "Open weather API Key is invalid. {}".format(e)
  27. )
  28. except Exception as e:
  29. raise ToolProviderCredentialValidationError(str(e))