mirror of
https://git.dn42.dev/dn42/registry.git
synced 2025-05-08 21:55:21 +08:00
add scan-dir and scan-file to rspl
This commit is contained in:
parent
cf3bb1c9e2
commit
fd91b827e9
3 changed files with 34 additions and 8 deletions
|
@ -146,6 +146,8 @@ class FileDOM:
|
||||||
self.keys = keys
|
self.keys = keys
|
||||||
self.multi = multi
|
self.multi = multi
|
||||||
self.mntner = mntner
|
self.mntner = mntner
|
||||||
|
if self.src is None:
|
||||||
|
self.src = f"{self.schema}/{self.name}"
|
||||||
self.valid = True
|
self.valid = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -70,6 +70,8 @@ def run() -> int:
|
||||||
working_dir = os.getcwd()
|
working_dir = os.getcwd()
|
||||||
working_dir = os.environ.get("WORKING_DIR", working_dir)
|
working_dir = os.environ.get("WORKING_DIR", working_dir)
|
||||||
prog_dir = os.path.dirname(os.path.realpath(__file__))
|
prog_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
rpsl_dir = os.environ.get("RPSL_DIR", working_dir)
|
||||||
|
rpsl_dir = find_rpsl(rpsl_dir)
|
||||||
|
|
||||||
cmd, args = shift(shift(sys.argv)[1])
|
cmd, args = shift(shift(sys.argv)[1])
|
||||||
|
|
||||||
|
@ -90,7 +92,7 @@ def run() -> int:
|
||||||
return pkg.run(args, {
|
return pkg.run(args, {
|
||||||
"WORKING_DIR": working_dir,
|
"WORKING_DIR": working_dir,
|
||||||
"BIN_DIR": prog_dir,
|
"BIN_DIR": prog_dir,
|
||||||
"RPSL_DIR": find_rpsl(working_dir),
|
"RPSL_DIR": rpsl_dir,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,18 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import argparse
|
||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
|
|
||||||
from dom.filedom import FileDOM
|
from dom.filedom import FileDOM
|
||||||
from dom.schema import SchemaDOM
|
from dom.schema import SchemaDOM
|
||||||
from dom.transact import TransactDOM
|
from dom.transact import TransactDOM
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("--add-index", action='store_true')
|
||||||
|
parser.add_argument("--scan-dir", type=str, default=None)
|
||||||
|
parser.add_argument("--scan-file", type=str, default=None)
|
||||||
|
|
||||||
|
|
||||||
def index_files(path: str):
|
def index_files(path: str):
|
||||||
"""generate list of dom files"""
|
"""generate list of dom files"""
|
||||||
|
@ -27,13 +33,20 @@ def index_files(path: str):
|
||||||
|
|
||||||
def run(args: List[str], env: Dict[str, str]) -> int:
|
def run(args: List[str], env: Dict[str, str]) -> int:
|
||||||
"""run scan script"""
|
"""run scan script"""
|
||||||
|
opts = parser.parse_args(args)
|
||||||
|
|
||||||
path = env.get("RPSL_DIR")
|
path = env.get("RPSL_DIR")
|
||||||
if path is None:
|
if path is None:
|
||||||
print("RPSL index has not been generated.", file=sys.stderr)
|
print("RPSL directory not found. do `rpsl init` or set RPSL_DIR",
|
||||||
|
file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
index_file = os.path.join(path, ".rpsl/index")
|
index_file = os.path.join(path, ".rpsl/index")
|
||||||
|
schema_file = os.path.join(path, ".rpsl/schema")
|
||||||
|
|
||||||
|
if not os.path.exists(index_file) or not os.path.exists(schema_file):
|
||||||
|
print("RPSL index files not found. do `rpsl index`?")
|
||||||
|
return 1
|
||||||
|
|
||||||
lookups = {} # type: Dict[str, FileDOM]
|
lookups = {} # type: Dict[str, FileDOM]
|
||||||
schemas = {} # type: Dict[str, SchemaDOM]
|
schemas = {} # type: Dict[str, SchemaDOM]
|
||||||
|
@ -45,18 +58,27 @@ def run(args: List[str], env: Dict[str, str]) -> int:
|
||||||
lookups[(sp[0], sp[1])] = (sp[2], "")
|
lookups[(sp[0], sp[1])] = (sp[2], "")
|
||||||
print("done.", file=sys.stderr, flush=True)
|
print("done.", file=sys.stderr, flush=True)
|
||||||
|
|
||||||
schema_file = os.path.join(path, ".rpsl/schema")
|
|
||||||
schema_set = TransactDOM.from_file(schema_file)
|
schema_set = TransactDOM.from_file(schema_file)
|
||||||
|
|
||||||
for schema in schema_set.schemas:
|
for schema in schema_set.schemas:
|
||||||
schemas[schema.ref] = schema
|
schemas[schema.ref] = schema
|
||||||
|
|
||||||
files = index_files(path)
|
def file_gen():
|
||||||
# for dom in files:
|
if opts.scan_dir is not None:
|
||||||
# key, value = dom.index
|
path = os.path.join(env.get("WORKING_DIR"), opts.scan_dir)
|
||||||
# lookups[key] = value
|
elif opts.scan_file is not None:
|
||||||
|
path = os.path.join(env.get("WORKING_DIR"), opts.scan_file)
|
||||||
|
return TransactDOM.from_file(path).files
|
||||||
|
|
||||||
for dom in files:
|
return index_files(path)
|
||||||
|
|
||||||
|
if opts.add_index:
|
||||||
|
print("Add scanned items to lookup index...", file=sys.stderr)
|
||||||
|
for dom in file_gen():
|
||||||
|
key, value = dom.index
|
||||||
|
lookups[key] = value
|
||||||
|
|
||||||
|
for dom in file_gen():
|
||||||
s = schemas.get(dom.rel)
|
s = schemas.get(dom.rel)
|
||||||
if s is None:
|
if s is None:
|
||||||
print(f"{dom.src} schema not found for {dom.rel}")
|
print(f"{dom.src} schema not found for {dom.rel}")
|
||||||
|
|
Loading…
Add table
Reference in a new issue