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