Add pipekit drivers register for seeding JDBC driver rows.

Registers a driver-table row from the CLI. Kind is validated against
the code-level driver registry; JDBC class names default from a
built-in table (db2, pg, mssql). Refuses to double-register a kind
unless --force is passed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Paul Trowbridge 2026-04-22 22:01:59 -04:00
parent 01bcba78b4
commit e27167a4a3

View File

@ -45,6 +45,48 @@ def cmd_drivers_list(args) -> int:
return 0
_DEFAULT_JDBC_CLASSES = {
"db2": "com.ibm.as400.access.AS400JDBCDriver",
"pg": "org.postgresql.Driver",
"mssql": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
}
def cmd_drivers_register(args) -> int:
try:
drivers.get_driver(args.kind)
except ValueError as e:
print(f"error: {e}")
return 1
existing = [d for d in repo.list_drivers() if d["kind"] == args.kind]
if existing and not args.force:
print(f"driver kind {args.kind!r} already registered as "
f"{existing[0]['name']!r} (id={existing[0]['id']}). "
f"Use --force to add a second row.")
return 0
class_name = args.class_name or _DEFAULT_JDBC_CLASSES.get(args.kind)
if not class_name:
print(f"error: no built-in JDBC class for kind {args.kind!r}; "
f"pass --class explicitly")
return 1
import os
if not os.path.exists(args.jar):
print(f"warning: jar {args.jar!r} does not exist "
f"(registering anyway)")
name = args.name or f"{args.kind}-jdbc"
row = repo.create_driver(
name=name, kind=args.kind, jar_file=args.jar,
class_name=class_name, url_template=args.url_template,
)
print(f"registered driver id={row['id']} name={row['name']!r} "
f"kind={row['kind']!r}")
return 0
def cmd_drivers_show(args) -> int:
try:
d = drivers.get_driver(args.kind)
@ -150,6 +192,21 @@ def main(argv: list[str] | None = None) -> int:
p_drv_show.add_argument("kind", help="one of the kinds from `pipekit drivers list`")
p_drv_show.set_defaults(func=cmd_drivers_show)
p_drv_reg = drv_sub.add_parser(
"register", help="add a driver row to the database")
p_drv_reg.add_argument("kind", help="driver kind (db2, pg, mssql)")
p_drv_reg.add_argument("--jar", required=True,
help="absolute path to the JDBC jar")
p_drv_reg.add_argument("--name",
help="registry name (default: <kind>-jdbc)")
p_drv_reg.add_argument("--class", dest="class_name",
help="JDBC Driver class (default: built-in per kind)")
p_drv_reg.add_argument("--url-template",
help="optional JDBC URL template for the wizard")
p_drv_reg.add_argument("--force", action="store_true",
help="register even if a row for this kind exists")
p_drv_reg.set_defaults(func=cmd_drivers_register)
p_run = sub.add_parser("run", help="run a module by name (synchronous)")
p_run.add_argument("module", help="module name")
p_run.add_argument("--dry-run", action="store_true",