Skip to main content
Glama
MatiousCorp

Google Ad Manager MCP Server

by MatiousCorp
utils.py2.58 kB
"""Utility functions for GAM MCP Server.""" from typing import Any, Optional def safe_get(obj: Any, key: str, default: Any = None) -> Any: """Safely get an attribute from a zeep object or dict. Args: obj: The object to get the attribute from (zeep object or dict) key: The attribute/key name default: Default value if not found Returns: The attribute value or default """ if obj is None: return default # Try dict-style access first (for plain dicts) if isinstance(obj, dict): return obj.get(key, default) # Try attribute access (for zeep objects) try: value = getattr(obj, key, None) if value is None: return default return value except (AttributeError, KeyError): pass # Try bracket access (zeep objects support this too) try: value = obj[key] if value is None: return default return value except (KeyError, TypeError, IndexError): pass return default def extract_date(datetime_obj: Any) -> Optional[str]: """Extract date string from a GAM datetime object. Args: datetime_obj: A GAM datetime object with date property Returns: Date string in YYYY-MM-DD format or None """ if datetime_obj is None: return None date_obj = safe_get(datetime_obj, 'date') if date_obj is None: return None year = safe_get(date_obj, 'year') month = safe_get(date_obj, 'month', 1) day = safe_get(date_obj, 'day', 1) if year is None: return None return f"{year}-{month:02d}-{day:02d}" def zeep_to_dict(obj: Any) -> Any: """Convert a zeep object to a regular Python dict recursively. Args: obj: A zeep object or any value Returns: A regular Python dict or the original value """ if obj is None: return None if isinstance(obj, (str, int, float, bool)): return obj if isinstance(obj, (list, tuple)): return [zeep_to_dict(item) for item in obj] if isinstance(obj, dict): return {k: zeep_to_dict(v) for k, v in obj.items()} # Try to convert zeep object to dict try: # Zeep objects have __values__ attribute if hasattr(obj, '__values__'): return {k: zeep_to_dict(v) for k, v in obj.__values__.items()} except Exception: pass # Fallback: try to get dict representation try: return dict(obj) except (TypeError, ValueError): pass return str(obj)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MatiousCorp/google-ad-manager-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server