import json from superoffice_client import SuperOfficeClient import logging # Setup Logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("discovery") def discover(): print("🔍 Starting SuperOffice Discovery Tool...") client = SuperOfficeClient() if not client.access_token: print("❌ Auth failed. Check .env") return # 1. Discover UDFs (User Defined Fields) print("\n--- 1. User Defined Fields (UDFs) ---") # Contact UDFs try: print("Fetching a sample Contact to inspect UDFs...") contacts = client.search("Contact?$top=1") if contacts: # Inspect keys of first result first_contact = contacts[0] # Try to find ID c_id = first_contact.get('ContactId') or first_contact.get('PrimaryKey') if c_id: c = client.get_contact(c_id) udfs = c.get("UserDefinedFields", {}) print(f"Found {len(udfs)} UDFs on Contact {c_id}:") for k, v in udfs.items(): print(f" - Key (ProgId): {k} | Value: {v}") else: print(f"⚠️ Could not find ID in search result: {first_contact.keys()}") else: print("⚠️ No contacts found. Cannot inspect Contact UDFs.") print("\nFetching a sample Person to inspect UDFs...") persons = client.search("Person?$top=1") if persons: first_person = persons[0] p_id = first_person.get('PersonId') or first_person.get('PrimaryKey') if p_id: p = client.get_person(p_id) udfs = p.get("UserDefinedFields", {}) print(f"Found {len(udfs)} UDFs on Person {p_id}:") for k, v in udfs.items(): print(f" - Key (ProgId): {k} | Value: {v}") else: print(f"⚠️ Could not find ID in search result: {first_person.keys()}") else: print("⚠️ No persons found. Cannot inspect Person UDFs.") except Exception as e: print(f"❌ Error inspecting UDFs: {e}") # 2. Discover Lists (MDO Providers) print("\n--- 2. MDO Lists (Positions, Business/Industry) ---") lists_to_check = ["position", "business"] for list_name in lists_to_check: print(f"\nChecking List: '{list_name}'...") try: # Endpoint: GET /List/{list_name}/Items items = client._get(f"List/{list_name}/Items") if items: print(f"Found {len(items)} items in '{list_name}':") for item in items: print(f" - ID: {item['Id']} | Name: '{item['Name']}'") else: print(f" (List '{list_name}' is empty or not accessible)") except Exception as e: print(f" ❌ Failed to fetch list '{list_name}': {e}") if __name__ == "__main__": discover()