Schema API
Users & Currencies

Users & Currencies

Methods for querying user and currency data from your DealCloud site.

get_users()

Returns all users in the site:

from dealcloud_sdk import DealCloud, DealCloudConfig
 
config = DealCloudConfig(
    siteUrl="yoursite.dealcloud.com",
    clientId=12345,
    clientSecret="your-secret",
)
dc = DealCloud.from_config_object(config)
 
users = dc.get_users()
 
for user in users:
    print(f"{user.name} ({user.email})")

Active Users Only

# Only active users
active_users = dc.get_users(active_only=True)
print(f"Active users: {len(active_users)}")

User Properties

PropertyTypeDescription
idintUnique user ID
namestrDisplay name
emailstrEmail address
isActiveboolIs user active
firstNamestrFirst name
lastNamestrLast name

User Lookup Helpers

By Email

def get_user_by_email(dc, email: str):
    """Find user by email address."""
    users = dc.get_users()
    return next((u for u in users if u.email.lower() == email.lower()), None)
 
user = get_user_by_email(dc, "john.smith@company.com")
if user:
    print(f"Found: {user.name} (ID: {user.id})")

User map (email → ID)

The SDK exposes get_user_map(active_only=False), which returns dict[str, int] (email → user id). Prefer it over reimplementing:

user_map = dc.get_user_map(active_only=True)
user_id = user_map.get("john.smith@company.com")
if user_id:
    dc.insert_data("Deal", [{"DealName": "New Deal", "AssignedTo": user_id}])

For resolving a single user by email with the User Management API (different response shape), see User Management and get_user_by_email.

User ID → Name Map

def get_user_name_map(dc):
    """Build user ID → name mapping."""
    users = dc.get_users()
    return {u.id: u.name for u in users}
 
name_map = get_user_name_map(dc)
 
# Resolve user names in data
deals = dc.read_data("Deal", output="list", reference_format=ReferenceFormat.ID)
for deal in deals:
    user_id = deal.get("AssignedTo")
    if user_id:
        print(f"Deal assigned to: {name_map.get(user_id, 'Unknown')}")

get_currencies()

Returns currency codes enabled in the site:

currencies = dc.get_currencies()
 
print("Enabled currencies:")
for currency in currencies:
    print(f"  {currency}")

Output

Enabled currencies:
  USD
  EUR
  GBP
  JPY
  ...

Check Currency Support

currencies = dc.get_currencies()
 
def validate_currency(code: str) -> bool:
    return code.upper() in currencies
 
if validate_currency("USD"):
    print("USD is supported")

Common Patterns

User Search

def search_users(dc, query: str):
    """Search users by name or email."""
    users = dc.get_users(active_only=True)
    query = query.lower()
    
    return [
        u for u in users
        if query in u.name.lower() or query in u.email.lower()
    ]
 
results = search_users(dc, "smith")
for user in results:
    print(f"{user.name}: {user.email}")

Export User List

import pandas as pd
 
def export_users(dc, filepath: str):
    """Export user list to Excel."""
    users = dc.get_users()
    
    df = pd.DataFrame([
        {
            "ID": u.id,
            "Name": u.name,
            "Email": u.email,
            "Active": u.isActive,
            "First Name": u.firstName,
            "Last Name": u.lastName
        }
        for u in users
    ])
    
    df.to_excel(filepath, index=False)
 
export_users(dc, "dealcloud_users.xlsx")

User Statistics

def user_stats(dc):
    """Get user statistics."""
    users = dc.get_users()
    
    total = len(users)
    active = sum(1 for u in users if u.isActive)
    inactive = total - active
    
    # Domain breakdown
    domains = {}
    for u in users:
        domain = u.email.split("@")[-1].lower()
        domains[domain] = domains.get(domain, 0) + 1
    
    print(f"Total users: {total}")
    print(f"Active: {active}, Inactive: {inactive}")
    print("\nBy domain:")
    for domain, count in sorted(domains.items(), key=lambda x: -x[1])[:10]:
        print(f"  {domain}: {count}")
 
user_stats(dc)

Working with User Fields

Writing User References

# Get user ID
users = dc.get_users()
john = next(u for u in users if "john" in u.name.lower())
 
# Use in insert/update
dc.insert_data("Deal", [
    {
        "DealName": "New Deal",
        "AssignedTo": john.id,
        "Team": [john.id, 5678, 9012]  # Multi-select user field
    }
])

Using Lookup Values

# Use email instead of ID
dc.insert_data(
    "Deal",
    [{"DealName": "New Deal", "AssignedTo": "john@company.com"}],
    use_dealcloud_ids=False
)

Caching Users

For frequent user lookups, cache the data:

class UserCache:
    def __init__(self, dc):
        self._users = None
        self._dc = dc
    
    @property
    def users(self):
        if self._users is None:
            self._users = self._dc.get_users()
        return self._users
    
    def get_by_email(self, email):
        return next((u for u in self.users if u.email.lower() == email.lower()), None)
    
    def get_by_id(self, user_id):
        return next((u for u in self.users if u.id == user_id), None)
    
    def refresh(self):
        self._users = None
 
# Usage
cache = UserCache(dc)
user = cache.get_by_email("john@company.com")

Related