blob: 56f9d3c80994d90a4db02e8241df5b84eb7c3d57 [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import { parseEndpoint, injectConnector, text, defineTool, endpointArg } from "../lib.ts"
export default defineTool({
name: "action_add_postgresql",
config: {
description: "Add PostgreSQL connection to an endpoint's context. Provides ctx.POSTGRESQL.",
inputSchema: { endpoint: endpointArg },
},
handler({ endpoint }) {
let ep
try {
ep = parseEndpoint(endpoint)
} catch (e) {
return text(`Error: ${(e as Error).message}`)
}
const injection = `
#--param POSTGRES_URL "$POSTGRES_URL"
import psycopg
def init_postgresql(args, ctx):
dburl = args.get("POSTGRES_URL", os.getenv("POSTGRES_URL"))
ctx.POSTGRESQL = psycopg.connect(dburl)
builder.append(init_postgresql)`
return text(
injectConnector({
endpoint: ep,
label: "PostgreSQL",
guard: "init_postgresql",
injection,
available: " ctx.POSTGRESQL — the psycopg connection",
}),
)
},
})