openweather.py 1.6 KB

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