import logging import os import time from datetime import datetime, timezone from flask import Flask, Response, abort, json, jsonify, request from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import config # selenium options chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--headless') tools = Flask(__name__) formatter = logging.Formatter(f'%(asctime)s - TOOLS - %(levelname)s - %(message)s') tools_logger = tools.logger handler = tools_logger.handlers[0].setFormatter(formatter) @tools.route("/datetime", methods=["GET"]) def get_datetime() -> Response: curr_date = datetime.now(timezone.utc).date().strftime("%Y-%m-%d") curr_time = datetime.now(timezone.utc).strftime("%H:%M:%S") return jsonify({"date": curr_date, "time": curr_time}) @tools.route("/calculator", methods=["POST"]) def calculate() -> Response: try: data = json.loads(request.data) if data["operator"] == "add": return jsonify(result=data["num1"] + data["num2"]) elif data["operator"] == "subtract": return jsonify(result=data["num1"] - data["num2"]) elif data["operator"] == "multiply": return jsonify(result=data["num1"] * data["num2"]) elif data["operator"] == "divide": return jsonify(result=data["num1"] / data["num2"]) else: abort(400, description="Invalid operator: " + data["operator"]) except KeyError as e: abort(400, description="Missing value in request body: " + str(e)) except Exception as e: abort(400, description="Error: " + str(e)) @tools.route("/websearch", methods=["POST"]) def google_search() -> Response: try: data = json.loads(request.data) import requests # Call the Playwright service resp = requests.post("http://localhost:5000/search", json={"query": data["query"]}, timeout=30) resp.raise_for_status() result = resp.json().get("result", "No result returned") return jsonify(result=result) except KeyError as e: abort(400, description="Missing value in request body: " + str(e)) except Exception as e: abort(400, description="Error: " + str(e)) @tools.route("/", methods=["GET"]) def home() -> str: return "hello" tools.run(host=config.tools_host, port=config.tools_port)