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:
parent
01bcba78b4
commit
e27167a4a3
@ -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",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user