@@ -117,23 +117,26 @@ def from_event(cls, event_id: str, event_type: str, event_occured_at: str, event
117117 )
118118
119119
120+ class WebhookHeaderResolutionError (Exception ):
121+ pass
122+
123+
120124class WebhookHeader (BaseModel ):
121125 key : str
122126 value : str
123127 kind : Literal ["static" , "environment" ]
124128
125- def resolve (self ) -> str | None :
129+ def resolve (self ) -> str :
126130 """Resolve the header value based on its kind.
127131
128- Returns None if the value cannot be resolved (e.g. missing environment variable) .
132+ Raises WebhookHeaderResolutionError if the value cannot be resolved.
129133 """
130134 if self .kind == "static" :
131135 return self .value
132136
133137 resolved = os .environ .get (self .value )
134138 if resolved is None :
135- logger .warning ("Environment variable '%s' not found, skipping header '%s'" , self .value , self .key )
136- return None
139+ raise WebhookHeaderResolutionError (f"Environment variable '{ self .value } ' not found" )
137140 return resolved
138141
139142
@@ -158,9 +161,10 @@ def _assign_headers(self, uuid: UUID | None = None, at: Timestamp | None = None)
158161 }
159162
160163 for header in self .custom_headers :
161- resolved = header .resolve ()
162- if resolved is not None :
163- self ._headers [header .key ] = resolved
164+ try :
165+ self ._headers [header .key ] = header .resolve ()
166+ except WebhookHeaderResolutionError as exc :
167+ logger .warning ("Webhook '%s': %s, skipping header '%s'" , self .name , exc , header .key )
164168
165169 if self .shared_key :
166170 message_id = f"msg_{ uuid .hex } " if uuid else f"msg_{ uuid4 ().hex } "
0 commit comments