mirror of
https://git.minetest.land/dn42/registry
synced 2025-10-11 01:43:43 +02:00
82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
"""rpsl a tool for managing RPSL databases
|
|
==========================================
|
|
|
|
Usage: rpsl [command] [options]
|
|
rpsl help [command]
|
|
|
|
"""
|
|
|
|
|
|
import os
|
|
import sys
|
|
from typing import Optional
|
|
|
|
import importlib
|
|
import pkgutil
|
|
|
|
from dn42.utils import find_rpsl, remove_prefix, shift
|
|
|
|
discovered_plugins = {
|
|
remove_prefix(name, "rpsl_"): importlib.import_module(name)
|
|
for finder, name, ispkg
|
|
in pkgutil.iter_modules()
|
|
if name.startswith("rpsl_")
|
|
}
|
|
|
|
|
|
def do_help(cmd: Optional[str] = None):
|
|
"Print Help and exit"
|
|
|
|
print(__doc__, file=sys.stderr)
|
|
|
|
if cmd is None:
|
|
print("Available commands:", file=sys.stderr)
|
|
for pkg in discovered_plugins.keys():
|
|
print(f" - {pkg}", file=sys.stderr)
|
|
return 0
|
|
|
|
if cmd not in discovered_plugins:
|
|
print(f"Command not found: {cmd}", file=sys.stderr)
|
|
return 1
|
|
|
|
print(discovered_plugins[cmd].__doc__, file=sys.stderr)
|
|
return 0
|
|
|
|
|
|
def run() -> int:
|
|
"run application command"
|
|
_, args = shift(sys.argv) # drop exec name
|
|
cmd, args = shift(args)
|
|
|
|
working_dir = os.getcwd()
|
|
working_dir = os.environ.get("WORKING_DIR", working_dir)
|
|
|
|
prog_dir = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
rpsl_dir = os.environ.get("RPSL_DIR", working_dir)
|
|
rpsl_dir = find_rpsl(rpsl_dir)
|
|
|
|
if cmd is None or cmd == 'help':
|
|
cmd, _ = shift(args)
|
|
return do_help(cmd)
|
|
|
|
if cmd not in discovered_plugins:
|
|
print(f"Unsupported Command: {cmd}")
|
|
return 1
|
|
|
|
pkg = discovered_plugins[cmd]
|
|
|
|
if 'run' not in dir(pkg):
|
|
print(f"Command {cmd} is not compatible with rspl.", file=sys.stderr)
|
|
return 1
|
|
|
|
return pkg.run(args, {
|
|
"WORKING_DIR": working_dir,
|
|
"BIN_DIR": prog_dir,
|
|
"RPSL_DIR": rpsl_dir,
|
|
})
|
|
|
|
|
|
if __name__ == '__main__':
|
|
code = run()
|
|
sys.exit(code)
|