Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
227 lines
7.3 KiB
Python
227 lines
7.3 KiB
Python
"""
|
|
WooCommerce Plugin - E-commerce Management
|
|
|
|
Split from WordPress Core in Phase D.1.
|
|
Provides 28 tools for WooCommerce store management.
|
|
|
|
Uses shared WordPress handlers for implementation.
|
|
"""
|
|
|
|
from typing import Any
|
|
|
|
from plugins.base import BasePlugin
|
|
from plugins.wordpress.client import WordPressClient
|
|
from plugins.wordpress.handlers import (
|
|
CouponsHandler,
|
|
CustomersHandler,
|
|
OrdersHandler,
|
|
ProductsHandler,
|
|
ReportsHandler,
|
|
get_coupons_specs,
|
|
get_customers_specs,
|
|
get_orders_specs,
|
|
get_products_specs,
|
|
get_reports_specs,
|
|
)
|
|
|
|
class WooCommercePlugin(BasePlugin):
|
|
"""
|
|
WooCommerce E-commerce Plugin.
|
|
|
|
Provides comprehensive WooCommerce management capabilities:
|
|
- Products (12 tools): CRUD, categories, tags, attributes, variations
|
|
- Orders (5 tools): list, get, create, update_status, delete
|
|
- Customers (4 tools): list, get, create, update
|
|
- Coupons (4 tools): list, create, update, delete
|
|
- Reports (3 tools): sales, top_sellers, customer_report
|
|
|
|
Total: 28 tools
|
|
"""
|
|
|
|
@staticmethod
|
|
def get_plugin_name() -> str:
|
|
"""Return plugin type identifier"""
|
|
return "woocommerce"
|
|
|
|
@staticmethod
|
|
def get_required_config_keys() -> list[str]:
|
|
"""Return required configuration keys"""
|
|
return ["url", "username", "app_password"]
|
|
|
|
def __init__(self, config: dict[str, Any], project_id: str | None = None):
|
|
"""
|
|
Initialize WooCommerce plugin with handlers.
|
|
|
|
Args:
|
|
config: Configuration dictionary containing:
|
|
- url: WordPress site URL
|
|
- username: WordPress username
|
|
- app_password: WordPress application password
|
|
project_id: Optional project ID (auto-generated if not provided)
|
|
"""
|
|
super().__init__(config, project_id=project_id)
|
|
|
|
# Create WordPress API client (WooCommerce uses WordPress REST API)
|
|
self.client = WordPressClient(
|
|
site_url=config["url"], username=config["username"], app_password=config["app_password"]
|
|
)
|
|
|
|
# Initialize WooCommerce handlers
|
|
self.products = ProductsHandler(self.client)
|
|
self.orders = OrdersHandler(self.client)
|
|
self.customers = CustomersHandler(self.client)
|
|
self.coupons = CouponsHandler(self.client)
|
|
self.reports = ReportsHandler(self.client)
|
|
|
|
@staticmethod
|
|
def get_tool_specifications() -> list[dict[str, Any]]:
|
|
"""
|
|
Return all tool specifications for ToolGenerator.
|
|
|
|
This method is called by ToolGenerator to create unified tools
|
|
with site parameter routing.
|
|
|
|
Returns:
|
|
List of tool specification dictionaries (28 tools)
|
|
"""
|
|
specs = []
|
|
|
|
# Products (12 tools)
|
|
specs.extend(get_products_specs())
|
|
|
|
# Orders (5 tools)
|
|
specs.extend(get_orders_specs())
|
|
|
|
# Customers (4 tools)
|
|
specs.extend(get_customers_specs())
|
|
|
|
# Coupons (4 tools)
|
|
specs.extend(get_coupons_specs())
|
|
|
|
# Reports (3 tools)
|
|
specs.extend(get_reports_specs())
|
|
|
|
return specs
|
|
|
|
async def health_check(self) -> dict[str, Any]:
|
|
"""
|
|
Check WooCommerce availability and health.
|
|
|
|
Returns:
|
|
Dict with health status and WooCommerce version
|
|
"""
|
|
try:
|
|
wc_status = await self.client.check_woocommerce()
|
|
if wc_status.get("available"):
|
|
return {
|
|
"healthy": True,
|
|
"message": "WooCommerce is available",
|
|
"version": wc_status.get("version", "unknown"),
|
|
"plugin_type": "woocommerce",
|
|
}
|
|
else:
|
|
return {
|
|
"healthy": False,
|
|
"message": "WooCommerce is not available on this site",
|
|
"plugin_type": "woocommerce",
|
|
}
|
|
except Exception as e:
|
|
return {
|
|
"healthy": False,
|
|
"message": f"Health check failed: {str(e)}",
|
|
"plugin_type": "woocommerce",
|
|
}
|
|
|
|
# ========================================
|
|
# Method Delegation to Handlers
|
|
# ========================================
|
|
|
|
# === Products ===
|
|
async def list_products(self, **kwargs):
|
|
return await self.products.list_products(**kwargs)
|
|
|
|
async def get_product(self, **kwargs):
|
|
return await self.products.get_product(**kwargs)
|
|
|
|
async def create_product(self, **kwargs):
|
|
return await self.products.create_product(**kwargs)
|
|
|
|
async def update_product(self, **kwargs):
|
|
return await self.products.update_product(**kwargs)
|
|
|
|
async def delete_product(self, **kwargs):
|
|
return await self.products.delete_product(**kwargs)
|
|
|
|
async def list_product_categories(self, **kwargs):
|
|
return await self.products.list_product_categories(**kwargs)
|
|
|
|
async def create_product_category(self, **kwargs):
|
|
return await self.products.create_product_category(**kwargs)
|
|
|
|
async def list_product_tags(self, **kwargs):
|
|
return await self.products.list_product_tags(**kwargs)
|
|
|
|
async def list_product_attributes(self, **kwargs):
|
|
return await self.products.list_product_attributes(**kwargs)
|
|
|
|
async def create_product_attribute(self, **kwargs):
|
|
return await self.products.create_product_attribute(**kwargs)
|
|
|
|
async def list_product_variations(self, **kwargs):
|
|
return await self.products.list_product_variations(**kwargs)
|
|
|
|
async def create_product_variation(self, **kwargs):
|
|
return await self.products.create_product_variation(**kwargs)
|
|
|
|
# === Orders ===
|
|
async def list_orders(self, **kwargs):
|
|
return await self.orders.list_orders(**kwargs)
|
|
|
|
async def get_order(self, **kwargs):
|
|
return await self.orders.get_order(**kwargs)
|
|
|
|
async def create_order(self, **kwargs):
|
|
return await self.orders.create_order(**kwargs)
|
|
|
|
async def update_order_status(self, **kwargs):
|
|
return await self.orders.update_order_status(**kwargs)
|
|
|
|
async def delete_order(self, **kwargs):
|
|
return await self.orders.delete_order(**kwargs)
|
|
|
|
# === Customers ===
|
|
async def list_customers(self, **kwargs):
|
|
return await self.customers.list_customers(**kwargs)
|
|
|
|
async def get_customer(self, **kwargs):
|
|
return await self.customers.get_customer(**kwargs)
|
|
|
|
async def create_customer(self, **kwargs):
|
|
return await self.customers.create_customer(**kwargs)
|
|
|
|
async def update_customer(self, **kwargs):
|
|
return await self.customers.update_customer(**kwargs)
|
|
|
|
# === Coupons ===
|
|
async def list_coupons(self, **kwargs):
|
|
return await self.coupons.list_coupons(**kwargs)
|
|
|
|
async def create_coupon(self, **kwargs):
|
|
return await self.coupons.create_coupon(**kwargs)
|
|
|
|
async def update_coupon(self, **kwargs):
|
|
return await self.coupons.update_coupon(**kwargs)
|
|
|
|
async def delete_coupon(self, **kwargs):
|
|
return await self.coupons.delete_coupon(**kwargs)
|
|
|
|
# === Reports ===
|
|
async def get_sales_report(self, **kwargs):
|
|
return await self.reports.get_sales_report(**kwargs)
|
|
|
|
async def get_top_sellers(self, **kwargs):
|
|
return await self.reports.get_top_sellers(**kwargs)
|
|
|
|
async def get_customer_report(self, **kwargs):
|
|
return await self.reports.get_customer_report(**kwargs)
|