[30388f42] Infrastructure Hardening: Repaired CE/Connector DB schema, fixed frontend styling build, implemented robust echo shield in worker v2.1.1, and integrated Lead Engine into gateway.
This commit is contained in:
87
connector-superoffice/diagnose_email_capability.py
Normal file
87
connector-superoffice/diagnose_email_capability.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv(override=True)
|
||||
from superoffice_client import SuperOfficeClient
|
||||
from config import settings
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger("diagnose-email")
|
||||
|
||||
def diagnose():
|
||||
print("🔍 Starting Email Capability Diagnosis...")
|
||||
client = SuperOfficeClient()
|
||||
if not client.access_token:
|
||||
print("❌ Auth failed.")
|
||||
return
|
||||
|
||||
# 1. Check Licenses / Capabilities via Associate/Me
|
||||
print("\n--- 1. User & License Check ---")
|
||||
try:
|
||||
me = client._get("Associate/Me")
|
||||
if me:
|
||||
print(f"User: {me.get('Name')} (ID: {me.get('AssociateId')})")
|
||||
print(f"Type: {me.get('Type')}")
|
||||
# Check for specific functional rights if available in the object
|
||||
# (Note: API often hides raw license keys, but let's check what we get)
|
||||
print("Function Rights (TableRight):", me.get("TableRight"))
|
||||
else:
|
||||
print("❌ Could not fetch current user.")
|
||||
except Exception as e:
|
||||
print(f"❌ User check failed: {e}")
|
||||
|
||||
# 2. Check User Preferences (Email Settings)
|
||||
# Endpoint: GET /Preference/{section}/{key}
|
||||
# We look for 'Mail' section preferences
|
||||
print("\n--- 2. Email Preferences (System & User) ---")
|
||||
pref_keys = [
|
||||
("Mail", "EmailClient"),
|
||||
("Mail", "EmailSystem"),
|
||||
("System", "SoProtocol"),
|
||||
("Visual", "UseWebTools")
|
||||
]
|
||||
|
||||
for section, key in pref_keys:
|
||||
try:
|
||||
# Note: The API for preferences might be /Preference/<Section>/<Key>
|
||||
# or require a search. Let's try direct access first.
|
||||
res = client._get(f"Preference/{section}/{key}")
|
||||
if res:
|
||||
print(f"✅ Preference '{section}/{key}': {json.dumps(res, indent=2)}")
|
||||
else:
|
||||
print(f"❓ Preference '{section}/{key}' not found or empty.")
|
||||
except Exception as e:
|
||||
print(f"⚠️ Error checking preference '{section}/{key}': {e}")
|
||||
|
||||
# 3. Check for specific functional rights (Archive/List)
|
||||
# If we can access 'ShipmentType' list, we might have Marketing
|
||||
print("\n--- 3. Marketing Capability Check ---")
|
||||
try:
|
||||
shipment_types = client._get("List/ShipmentType/Items")
|
||||
if shipment_types:
|
||||
print(f"✅ Found {len(shipment_types)} Shipment Types (Marketing module likely active).")
|
||||
for st in shipment_types:
|
||||
print(f" - {st.get('Name')} (ID: {st.get('Id')})")
|
||||
else:
|
||||
print("❌ No Shipment Types found (Marketing module might be inactive/restricted).")
|
||||
except Exception as e:
|
||||
print(f"❌ Error checking Shipment Types: {e}")
|
||||
|
||||
# 4. Check Document Template for 'Email'
|
||||
print("\n--- 4. Document Template Configuration ---")
|
||||
try:
|
||||
# We know ID 157 exists, let's inspect it closely
|
||||
tmpl = client._get("DocumentTemplate/157")
|
||||
if tmpl:
|
||||
print(f"Template 157: {tmpl.get('Name')}")
|
||||
print(f" - Generator: {tmpl.get('Generator')}") # Important!
|
||||
print(f" - Filename: {tmpl.get('Filename')}")
|
||||
print(f" - Direction: {tmpl.get('Direction')}")
|
||||
else:
|
||||
print("❌ Template 157 not found via ID.")
|
||||
except Exception as e:
|
||||
print(f"❌ Error checking Template 157: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
diagnose()
|
||||
Reference in New Issue
Block a user