1- import subprocess
21import boto3
3- import sys
42import json
53from aws_lambda_powertools .utilities import parameters
64import pandas as pd
7-
8- subprocess .call ([sys .executable , "-m" , "pip" , "install" , "pg8000" , "-t" , "/tmp/" ])
9- sys .path .insert (0 , "/tmp/" )
105import pg8000
116
7+
128GEN_AI_LAMBDA = "More_Org_GenAI_Py_v3126"
139
10+ # --- All cached at module level, initialized once on cold start ---
11+ lambda_client = boto3 .client ('lambda' )
12+
13+ _creds = json .loads (parameters .get_parameter (
14+ '/dev/saayam/db/Virginia/Analytics/user' ,
15+ decrypt = True ,
16+ max_age = 3600
17+ ))
18+ _db_name = _creds ['DATABASE NAME' ]
19+ _db_conn = pg8000 .connect (
20+ host = _creds ['HOST' ],
21+ user = _creds ['USERNAME' ],
22+ password = _creds ['PASSWORD' ],
23+ database = _db_name ,
24+ port = _creds ['PORT' ],
25+ ssl_context = True
26+ )
27+ # -----------------------------------------------------------------
28+
1429def get_orgs_from_db (location , category ):
1530 try :
16- creds = json .loads (parameters .get_parameter (
17- '/dev/saayam/db/Virginia/Analytics/user' ,
18- decrypt = True ,
19- max_age = 3600
20- ))
21- database = creds ['DATABASE NAME' ]
22-
23- conn = pg8000 .connect (
24- host = creds ['HOST' ],
25- user = creds ['USERNAME' ],
26- password = creds ['PASSWORD' ],
27- database = database ,
28- port = creds ['PORT' ],
29- ssl_context = True
30- )
31-
3231 df = pd .read_sql (
33- f"SELECT * FROM { database } .organizations WHERE mission = '{ category } ' AND city_name = '{ location } '" ,
34- conn
32+ f"SELECT * FROM { _db_name } .organizations WHERE mission = '{ category } ' AND city_name = '{ location } '" ,
33+ _db_conn
3534 )
36- conn . close ()
35+ df [ "db_or_ai" ] = "db"
3736 return df
38-
39- except parameters .GetParameterError as e :
40- raise Exception (f'Failed to retrieve DB credentials: { str (e )} ' )
4137 except pg8000 .DatabaseError as e :
4238 raise Exception (f'Database error: { str (e )} ' )
4339 except Exception as e :
@@ -46,7 +42,7 @@ def get_orgs_from_db(location, category):
4642
4743def get_ai_orgs (subject , description , location ):
4844 try :
49- response = boto3 . client ( 'lambda' ) .invoke (
45+ response = lambda_client .invoke (
5046 FunctionName = GEN_AI_LAMBDA ,
5147 InvocationType = 'RequestResponse' ,
5248 Payload = json .dumps ({
@@ -55,14 +51,12 @@ def get_ai_orgs(subject, description, location):
5551 "location" : location
5652 })
5753 )
58-
5954 payload = json .loads (response ['Payload' ].read ())
60-
6155 if payload .get ('statusCode' ) != 200 :
6256 raise Exception (f'GenAI Lambda returned error: { payload } ' )
63-
64- return pd . DataFrame ( payload [ 'body' ][ 'organizations' ])
65-
57+ orgs = pd . DataFrame ( payload [ 'body' ][ 'organizations' ])
58+ orgs [ "db_or_ai" ] = "ai"
59+ return orgs
6660 except boto3 .exceptions .Boto3Error as e :
6761 raise Exception (f'Failed to invoke GenAI Lambda: { str (e )} ' )
6862 except (KeyError , TypeError ) as e :
@@ -77,14 +71,13 @@ def merge_organizations(db_organizations, genAI_organizations):
7771 'org_name' : 'name' ,
7872 'city_name' : 'location' ,
7973 'phone' : 'contact'
80- })[['name' , 'location' , 'contact' , 'email' , 'web_url' , 'mission' , 'source' ]]
74+ })[['name' , 'location' , 'contact' , 'email' , 'web_url' , 'mission' , 'source' , "db_or_ai" ]]
8175
8276 genAI_organizations = genAI_organizations .rename (columns = {
8377 'organization_name' : 'name'
84- })[['name' , 'location' , 'contact' , 'email' , 'web_url' , 'mission' , 'source' ]]
78+ })[['name' , 'location' , 'contact' , 'email' , 'web_url' , 'mission' , 'source' , "db_or_ai" ]]
8579
8680 return pd .concat ([db_organizations , genAI_organizations ], ignore_index = True )
87-
8881 except KeyError as e :
8982 raise Exception (f'Missing expected column during merge: { str (e )} ' )
9083 except Exception as e :
0 commit comments