__init__.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from collections.abc import Mapping
  2. from typing import Any, Optional
  3. from pydantic import Field
  4. from pydantic.fields import FieldInfo
  5. from pydantic_settings import BaseSettings
  6. from configs.remote_settings_sources.base import RemoteSettingsSource
  7. from .client import ApolloClient
  8. class ApolloSettingsSourceInfo(BaseSettings):
  9. """
  10. Packaging build information
  11. """
  12. APOLLO_APP_ID: Optional[str] = Field(
  13. description="apollo app_id",
  14. default=None,
  15. )
  16. APOLLO_CLUSTER: Optional[str] = Field(
  17. description="apollo cluster",
  18. default=None,
  19. )
  20. APOLLO_CONFIG_URL: Optional[str] = Field(
  21. description="apollo config url",
  22. default=None,
  23. )
  24. APOLLO_NAMESPACE: Optional[str] = Field(
  25. description="apollo namespace",
  26. default=None,
  27. )
  28. class ApolloSettingsSource(RemoteSettingsSource):
  29. def __init__(self, configs: Mapping[str, Any]):
  30. self.client = ApolloClient(
  31. app_id=configs["APOLLO_APP_ID"],
  32. cluster=configs["APOLLO_CLUSTER"],
  33. config_url=configs["APOLLO_CONFIG_URL"],
  34. start_hot_update=False,
  35. _notification_map={configs["APOLLO_NAMESPACE"]: -1},
  36. )
  37. self.namespace = configs["APOLLO_NAMESPACE"]
  38. self.remote_configs = self.client.get_all_dicts(self.namespace)
  39. def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str, bool]:
  40. if not isinstance(self.remote_configs, dict):
  41. raise ValueError(f"remote configs is not dict, but {type(self.remote_configs)}")
  42. field_value = self.remote_configs.get(field_name)
  43. return field_value, field_name, False