Update app.py
Browse files
app.py
CHANGED
|
@@ -7,6 +7,7 @@ import os
|
|
| 7 |
import logging
|
| 8 |
from datetime import datetime
|
| 9 |
from fastapi.responses import HTMLResponse
|
|
|
|
| 10 |
|
| 11 |
# Set up logging to capture errors and debug information
|
| 12 |
logging.basicConfig(level=logging.INFO)
|
|
@@ -14,11 +15,24 @@ logger = logging.getLogger(__name__)
|
|
| 14 |
|
| 15 |
app = FastAPI()
|
| 16 |
|
| 17 |
-
#
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |
# VendorLog model to match Salesforce data
|
| 24 |
class VendorLog(BaseModel):
|
|
@@ -136,8 +150,9 @@ def determine_alert_flag(final_score: float, all_logs: list):
|
|
| 136 |
async def score_vendor(log: VendorLog, authorization: str = Header(...)):
|
| 137 |
try:
|
| 138 |
logger.info(f"Received Vendor Log: {log}")
|
| 139 |
-
|
| 140 |
-
|
|
|
|
| 141 |
|
| 142 |
# Calculate scores
|
| 143 |
scores = calculate_scores(log)
|
|
@@ -165,7 +180,26 @@ async def score_vendor(log: VendorLog, authorization: str = Header(...)):
|
|
| 165 |
'extracted': True
|
| 166 |
})
|
| 167 |
|
| 168 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
return {
|
| 170 |
'vendorLogId': log.vendorLogId,
|
| 171 |
'vendorId': log.vendorId,
|
|
|
|
| 7 |
import logging
|
| 8 |
from datetime import datetime
|
| 9 |
from fastapi.responses import HTMLResponse
|
| 10 |
+
from simple_salesforce import Salesforce
|
| 11 |
|
| 12 |
# Set up logging to capture errors and debug information
|
| 13 |
logging.basicConfig(level=logging.INFO)
|
|
|
|
| 15 |
|
| 16 |
app = FastAPI()
|
| 17 |
|
| 18 |
+
# Salesforce credentials
|
| 19 |
+
SF_USERNAME = "scores@app.com"
|
| 20 |
+
SF_PASSWORD = "Internal@1"
|
| 21 |
+
SF_SECURITY_TOKEN = "NbUKcTx45azba5HEdntE9YAh"
|
| 22 |
+
SF_DOMAIN = "login"
|
| 23 |
+
|
| 24 |
+
# Initialize Salesforce connection
|
| 25 |
+
try:
|
| 26 |
+
sf = Salesforce(
|
| 27 |
+
username=SF_USERNAME,
|
| 28 |
+
password=SF_PASSWORD,
|
| 29 |
+
security_token=SF_SECURITY_TOKEN,
|
| 30 |
+
domain=SF_DOMAIN
|
| 31 |
+
)
|
| 32 |
+
logger.info("Successfully connected to Salesforce")
|
| 33 |
+
except Exception as e:
|
| 34 |
+
logger.error(f"Failed to connect to Salesforce: {str(e)}")
|
| 35 |
+
raise ValueError("Failed to connect to Salesforce")
|
| 36 |
|
| 37 |
# VendorLog model to match Salesforce data
|
| 38 |
class VendorLog(BaseModel):
|
|
|
|
| 150 |
async def score_vendor(log: VendorLog, authorization: str = Header(...)):
|
| 151 |
try:
|
| 152 |
logger.info(f"Received Vendor Log: {log}")
|
| 153 |
+
# Validate Salesforce session or token (optional, depending on your setup)
|
| 154 |
+
if not sf.session_id:
|
| 155 |
+
raise HTTPException(status_code=401, detail='Salesforce session invalid')
|
| 156 |
|
| 157 |
# Calculate scores
|
| 158 |
scores = calculate_scores(log)
|
|
|
|
| 180 |
'extracted': True
|
| 181 |
})
|
| 182 |
|
| 183 |
+
# Optionally, save scores back to Salesforce (example mapping to a custom object)
|
| 184 |
+
try:
|
| 185 |
+
sf.Vendor_Log__c.create({
|
| 186 |
+
'Vendor_Log_Id__c': log.vendorLogId,
|
| 187 |
+
'Vendor_Id__c': log.vendorId,
|
| 188 |
+
'Vendor_Log_Name__c': log.vendorLogName,
|
| 189 |
+
'Quality_Score__c': scores['qualityScore'],
|
| 190 |
+
'Timeliness_Score__c': scores['timelinessScore'],
|
| 191 |
+
'Safety_Score__c': scores['safetyScore'],
|
| 192 |
+
'Communication_Score__c': scores['communicationScore'],
|
| 193 |
+
'Final_Score__c': scores['finalScore'],
|
| 194 |
+
'Alert_Flag__c': alert_flag,
|
| 195 |
+
'PDF_Content__c': pdf_base64 # Assuming a text field for base64 PDF
|
| 196 |
+
})
|
| 197 |
+
logger.info(f"Successfully saved scores to Salesforce for Vendor Log: {log.vendorLogId}")
|
| 198 |
+
except Exception as e:
|
| 199 |
+
logger.error(f"Error saving to Salesforce: {str(e)}")
|
| 200 |
+
# Continue even if Salesforce save fails to ensure response is returned
|
| 201 |
+
|
| 202 |
+
# Return the response to the caller
|
| 203 |
return {
|
| 204 |
'vendorLogId': log.vendorLogId,
|
| 205 |
'vendorId': log.vendorId,
|