swh.webhooks.interface module#
- swh.webhooks.interface.get_config(config_file: str | None = None) Dict[str, Any] [source]#
Read the configuration file
config_file
.If an environment variable
SWH_CONFIG_FILENAME
is defined, this takes precedence over theconfig_file
parameter.
- swh.webhooks.interface.svix_list(svix_list_request: Callable[[str | None], SvixListResponse[SvixData]]) Iterator[SvixData] [source]#
- exception swh.webhooks.interface.SvixHttpError(error_dict: Dict[str, str])[source]#
Bases:
Exception
- class swh.webhooks.interface.EventType(name: str, description: str, schema: Dict[str, Any])[source]#
Bases:
object
Webhook event type definition
An event type is defined by a name, a description and a JSON schema.
- class swh.webhooks.interface.SentEvent(event_type_name: str, endpoint_url: str, channel: str | None, headers: Dict[str, Any], msg_id: str, payload: Dict[str, Any], timestamp: datetime, response: str, response_status_code: int)[source]#
Bases:
object
Webhook event delivery attempt definition
- class swh.webhooks.interface.Endpoint(url: str, event_type_name: str, channel: str | None = None, metadata: ~typing.Dict[str, ~typing.Any] = <factory>)[source]#
Bases:
object
Webhook user endpoint definition
- channel: str | None = None#
Optional channel this endpoint listens to, channels are an extra dimension of filtering messages that is orthogonal to event types
- property uid#
Unique identifier for the endpoint
- class swh.webhooks.interface.Webhooks(config_file: str | None = None, svix_server_url: str | None = None, svix_auth_token: str | None = None)[source]#
Bases:
object
Interface for Software Heritage Webhooks management built on top of the Svix framework (https://docs.svix.com/).
Svix makes sending webhooks easy and reliable by offering webhook sending as a service.
- Parameters:
svix_server_url – optional URL of the Svix server, retrieved from configuration if not provided
svix_auth_token – optional bearer token used to perform authenticated requests to the Svix REST API, retrieved from configuration if not provided
- event_type_create(event_type: EventType) None [source]#
Create or update a webhook event type.
- Parameters:
event_type – The event type to create or update
- Raises:
ValueError – if the event type name is not valid
svix.exceptions.HTTPError – if a request to the Svix REST API fails
jsonschema.exceptions.SchemaError – if the JSON schema of the event type is not valid
- event_type_get(event_type_name) EventType [source]#
Get an active event type by its name.
- Parameters:
event_type_name – The name of the event type to retrieve
- Raises:
ValueError – if there is no event type with this name
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- Returns:
The requested event type.
- event_types_list() List[EventType] [source]#
List all registered and active event types.
- Raises:
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- Returns:
A list of all registered event types.
- event_type_delete(event_type_name) None [source]#
Delete an event type.
The event type is not removed from database but is archived, it is no longer listed and no more events of this type can be sent after this operation. It can be unarchived by creating it again.
- Parameters:
event_type_name – The name of the event type to delete
- Raises:
ValueError – if there is no event type with this name
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- endpoint_create(endpoint: Endpoint, secret: str | None = None) None [source]#
Create or update an endpoint to receive webhook messages.
- Parameters:
endpoint – the endpoint to create
secret – secret used to verify the authenticity of webhook messages, it must match the regular expression
^whsec_[a-zA-Z0-9+/=]{32,100}$
and is automatically generated or rotated if not provided
- Raises:
ValueError – if the event type associated to the endpoint does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- endpoints_list(event_type_name: str, channel: str | None = None, ascending_order: bool = False, limit: int | None = None) Iterator[Endpoint] [source]#
List all endpoints receiving messages for a given event type.
- Parameters:
event_type_name – the name of the event type to retrieve associated endpoints
channel – optional channel name, only endpoints listening to it are listed if provided, please not that endpoints not listening to any channel receive all events and are always listed
ascending_order – whether to retrieve endpoints in the order they were created
limit – maximum number of endpoints to list
- Yields:
Endpoints listening to the event type
- Raises:
ValueError – if the event type does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- endpoint_get_secret(endpoint: Endpoint) str [source]#
Get secret for given endpoint to verify webhook signatures.
- Parameters:
endpoint – The endpoint to retrieve the secret
- Returns:
The endpoint’s secret.
- Raises:
ValueError – if the endpoint does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- endpoint_delete(endpoint: Endpoint) None [source]#
Delete an endpoint.
- Parameters:
endpoint – The endpoint to delete
- Raises:
ValueError – if the endpoint does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- event_send(event_type_name: str, payload: Dict[str, Any], channel: str | None = None) Tuple[str, datetime] | None [source]#
Send an event to registered endpoints.
- Parameters:
event_type_name – the name of the event type to send
payload – JSON payload of the event
channel – optional channel name, channels are case-sensitive, and endpoints that are filtering for a specific channel will only get messages sent to that specific channel.
- Returns:
Sent message id and timestamp as a tuple or
None
if no endpoints are listening to the event type.- Raises:
ValueError – if the event type does not exist
jsonschema.exceptions.ValidationError – if the payload does not match the event schema
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- sent_events_list_for_endpoint(endpoint: Endpoint, before: datetime | None = None, after: datetime | None = None, limit: int | None = None) Iterator[SentEvent] [source]#
List recent events sent to an endpoint.
- Parameters:
endpoint – the endpoint to list sent events
before – list sent events before that timezone aware date if provided
after – list sent events after that timezone aware date if provided
- Returns:
list of sent events
- Raises:
ValueError – if the endpoint does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails
- sent_events_list_for_event_type(event_type_name: str, channel: str | None = None, before: datetime | None = None, after: datetime | None = None, limit: int | None = None) Iterator[SentEvent] [source]#
List recent events sent for a specific event type.
- Parameters:
event_type_name – the name of the event type to list message attempts
channel – optional channel name, channels are case-sensitive, and endpoints that are filtering for a specific channel will only get messages sent to that specific channel.
before – list sent events before that timezone aware date if provided
after – list sent events after that timezone aware date if provided
- Returns:
list of sent events
- Raises:
ValueError – if the endpoint does not exist
svix.exceptions.HTTPError – if a request to the Svix REST API fails