functions/sync-review-comments-db/database.py (28 lines of code) (raw):

# -*- coding: utf-8 -*- # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. import json import os import pg8000 import sqlalchemy from google.cloud.sql.connector import Connector, IPTypes def init_connection_pool_engine() -> sqlalchemy.engine.base.Engine: """Initializes a connection pool for a Cloud SQL instance of Postgres. Uses the Cloud SQL Python Connector package. """ connector = Connector() credentials = json.loads(os.environ["DATABASE_CREDENTIALS"]) ip_type = IPTypes.PRIVATE if credentials["private_ip"] else IPTypes.PUBLIC def getconn() -> pg8000.dbapi.Connection: conn: pg8000.dbapi.Connection = connector.connect( credentials["instance_connection_name"], "pg8000", user=credentials["db_user"], password=credentials["db_password"], db=credentials["db_name"], ip_type=ip_type, ) return conn engine = sqlalchemy.create_engine( "postgresql+pg8000://", creator=getconn, pool_size=5, max_overflow=2, pool_timeout=30, # 30 seconds pool_recycle=1800, # 30 minutes ) return engine