src/dfcx_scrapi/agent_extract/webhooks.py (47 lines of code) (raw):
"""Webhook processing methods and functions."""
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
import os
from dfcx_scrapi.agent_extract import common, types
class Webhooks:
"""Webhook linter methods and functions."""
def __init__(self):
self.common = common.Common()
@staticmethod
def build_webhook_path_list(agent_local_path: str):
"""Builds a list of webhook file locations."""
root_dir = agent_local_path + "/webhooks"
webhook_paths = []
for webhook_file in os.listdir(root_dir):
webhook_file_path = f"{root_dir}/{webhook_file}"
webhook_paths.append(webhook_file_path)
return webhook_paths
@staticmethod
def get_service_type(webhook: types.Webhook) -> str:
"""Get the type of Webhook Service that is cofigured."""
if "genericWebService" in webhook.data:
webhook.service_type = "Generic Web Service"
else:
webhook.service_type = "Other"
return webhook.service_type
def process_webhook(self, webhook: types.Webhook, stats: types.AgentData
) -> types.AgentData:
"""Process a single Webhook file."""
with open(webhook.dir_path, "r", encoding="UTF-8") as webhook_file:
webhook.data = json.load(webhook_file)
webhook.resource_id = webhook.data.get("name", None)
webhook.display_name = webhook.data.get("displayName", None)
webhook.service_type = self.get_service_type(webhook)
timeout_dict = webhook.data.get("timeout", None)
if timeout_dict:
webhook.timeout = timeout_dict.get("seconds", None)
webhook_file.close()
full_webhook_id = f"{stats.agent_id}/webhooks/{webhook.resource_id}"
webhook.data["name"] = full_webhook_id
stats.webhooks.append(webhook.data)
stats.total_webhooks += 1
return stats
def process_webhooks_directory(self, agent_local_path: str,
stats: types.AgentData) -> types.AgentData:
"""Processing the top level Webhooks Dir in the JSON Package structure.
The following files exist under the `webhooks` dir:
- <webhook-name>.json
"""
# Create a list of all Webhook paths to iter through
webhook_paths = self.build_webhook_path_list(agent_local_path)
for webhook_path in webhook_paths:
webhook = types.Webhook()
webhook.dir_path = webhook_path
stats = self.process_webhook(webhook, stats)
full_webhook_id = f"{stats.agent_id}/webhooks/{webhook.resource_id}"
stats.webhooks_map[webhook.display_name] = full_webhook_id
return stats