99import logging
1010import json
1111import simple_salesforce
12- from mxcp .runtime import config
12+ from mxcp .runtime import config , on_init , on_shutdown
1313
1414logger = logging .getLogger (__name__ )
1515
16+ # Global Salesforce client for reuse across all function calls
17+ sf_client : Optional [simple_salesforce .Salesforce ] = None
1618
17- def _get_salesforce_client () -> simple_salesforce .Salesforce :
18- """Get configured Salesforce client from secrets."""
19+
20+ @on_init
21+ def setup_salesforce_client ():
22+ """Initialize Salesforce client when server starts."""
23+ global sf_client
24+ logger .info ("Initializing Salesforce client..." )
25+
1926 sf_config = config .get_secret ("salesforce" )
2027 if not sf_config :
2128 raise ValueError ("Salesforce configuration not found. Please configure Salesforce secrets in your user config." )
@@ -25,13 +32,32 @@ def _get_salesforce_client() -> simple_salesforce.Salesforce:
2532 if missing_keys :
2633 raise ValueError (f"Missing Salesforce configuration keys: { ', ' .join (missing_keys )} " )
2734
28- return simple_salesforce .Salesforce (
35+ sf_client = simple_salesforce .Salesforce (
2936 username = sf_config ["username" ],
3037 password = sf_config ["password" ],
3138 security_token = sf_config ["security_token" ],
3239 instance_url = sf_config ["instance_url" ],
3340 client_id = sf_config ["client_id" ]
3441 )
42+
43+ logger .info ("Salesforce client initialized successfully" )
44+
45+
46+ @on_shutdown
47+ def cleanup_salesforce_client ():
48+ """Clean up Salesforce client when server stops."""
49+ global sf_client
50+ if sf_client :
51+ # Salesforce client doesn't need explicit cleanup, but we'll clear the reference
52+ sf_client = None
53+ logger .info ("Salesforce client cleaned up" )
54+
55+
56+ def _get_salesforce_client () -> simple_salesforce .Salesforce :
57+ """Get the global Salesforce client."""
58+ if sf_client is None :
59+ raise RuntimeError ("Salesforce client not initialized. Make sure the server is started properly." )
60+ return sf_client
3561
3662
3763def soql (query : str ) -> List [Dict [str , Any ]]:
0 commit comments