blob: 0712222be93458a8adb360879bd6cf41f986f138 [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_redis",
config: {
description: "Add Redis connection to an endpoint's context. Provides ctx.REDIS and ctx.REDIS_PREFIX.",
inputSchema: { endpoint: endpointArg },
},
handler({ endpoint }) {
let ep
try {
ep = parseEndpoint(endpoint)
} catch (e) {
return text(`Error: ${(e as Error).message}`)
}
const injection = `
#--param REDIS_URL "$REDIS_URL"
#--param REDIS_PREFIX "$REDIS_PREFIX"
import redis
def init_redis(args, ctx):
ctx.REDIS = redis.from_url(args.get("REDIS_URL", os.getenv("REDIS_URL")))
ctx.REDIS_PREFIX = args.get("REDIS_PREFIX", os.getenv("REDIS_PREFIX"))
builder.append(init_redis)`
return text(
injectConnector({
endpoint: ep,
label: "Redis",
guard: "init_redis",
injection,
available: " ctx.REDIS — the Redis client\n ctx.REDIS_PREFIX — the key prefix",
}),
)
},
})