Coverage for custom_components/remote_logger/otel/const.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2026-04-07 04:46 +0000

1import voluptuous as vol 

2from homeassistant.const import CONF_HEADERS, CONF_HOST, CONF_PATH, CONF_PORT, CONF_TOKEN 

3from homeassistant.helpers import selector 

4 

5from custom_components.remote_logger.const import ( 

6 CONF_BATCH_MAX_SIZE, 

7 CONF_CLIENT_TIMEOUT, 

8 CONF_ENCODING, 

9 CONF_RESOURCE_ATTRIBUTES, 

10 CONF_USE_TLS, 

11 DEFAULT_BATCH_MAX_SIZE, 

12 DEFAULT_CLIENT_TIMEOUT, 

13) 

14 

15CONF_TOKEN_TYPE = "token_type" # noqa: S105 # nosec 

16TOKEN_TYPE_BEARER = "bearer" # noqa: S105 # nosec 

17TOKEN_TYPE_BASIC = "basic" # noqa: S105 # nosec 

18TOKEN_TYPE_API_KEY = "api_key" # noqa: S105 # nosec 

19TOKEN_TYPE_RAW_BASIC = "raw_basic" # noqa: S105 # nosec 

20DEFAULT_TOKEN_TYPE = TOKEN_TYPE_BEARER 

21 

22# OTLP endpoint path 

23OTLP_LOGS_PATH = "/v1/logs" 

24 

25# Severity mapping: HA log level string -> (OTLP severityNumber, OTLP severityText) 

26SEVERITY_MAP: dict[str, tuple[int, str]] = { 

27 "DEBUG": (5, "DEBUG"), 

28 "INFO": (9, "INFO"), 

29 "WARNING": (13, "WARN"), 

30 "ERROR": (17, "ERROR"), 

31 "CRITICAL": (21, "FATAL"), 

32} 

33 

34DEFAULT_SEVERITY = (9, "INFO") 

35 

36# OTel defaults 

37DEFAULT_HTTP_PORT = 4318 

38DEFAULT_GRPC_PORT = 4317 

39DEFAULT_USE_TLS = False 

40DEFAULT_RESOURCE_ATTRIBUTES = "" 

41ENCODING_JSON = "json" 

42ENCODING_PROTOBUF = "protobuf" 

43DEFAULT_ENCODING = ENCODING_PROTOBUF 

44 

45 

46# Integration metadata (used in InstrumentationScope) 

47SCOPE_NAME = "homeassistant" 

48SCOPE_VERSION = "1.0.0" 

49 

50# Default resource attribute 

51DEFAULT_SERVICE_NAME = "homeassistant.core" 

52 

53OTEL_DATA_SCHEMA = vol.Schema({ 

54 vol.Required(CONF_HOST): str, 

55 vol.Optional(CONF_PORT, default=DEFAULT_HTTP_PORT): int, 

56 vol.Optional(CONF_USE_TLS, default=DEFAULT_USE_TLS): bool, 

57 vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): selector.SelectSelector( 

58 selector.SelectSelectorConfig(options=[ENCODING_JSON, ENCODING_PROTOBUF]) 

59 ), 

60 vol.Optional(CONF_BATCH_MAX_SIZE, default=DEFAULT_BATCH_MAX_SIZE): vol.All(int, vol.Range(min=1, max=10000)), 

61 vol.Optional(CONF_RESOURCE_ATTRIBUTES, default=DEFAULT_RESOURCE_ATTRIBUTES): str, 

62 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector( 

63 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY]) 

64 ), 

65 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector( 

66 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD) 

67 ), 

68 vol.Optional(CONF_HEADERS, default=""): selector.TextSelector(selector.TextSelectorConfig(multiline=True)), 

69 vol.Optional(CONF_PATH, default=OTLP_LOGS_PATH): str, 

70 vol.Optional(CONF_CLIENT_TIMEOUT, default=DEFAULT_CLIENT_TIMEOUT): vol.All(int, vol.Range(min=1, max=300)), 

71}) 

72 

73REAUTH_OTEL_DATA_SCHEMA = vol.Schema({ 

74 vol.Optional(CONF_TOKEN_TYPE, default=DEFAULT_TOKEN_TYPE): selector.SelectSelector( 

75 selector.SelectSelectorConfig(options=[TOKEN_TYPE_BEARER, TOKEN_TYPE_BASIC, TOKEN_TYPE_RAW_BASIC, TOKEN_TYPE_API_KEY]) 

76 ), 

77 vol.Optional(CONF_TOKEN, default=""): selector.TextSelector( 

78 selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD) 

79 ), 

80})