add scan-dir and scan-file to rspl

This commit is contained in:
Jonathan Lundy 2020-06-23 10:38:35 -06:00
parent cf3bb1c9e2
commit fd91b827e9
No known key found for this signature in database
GPG key ID: C63E6D61F3035024
3 changed files with 34 additions and 8 deletions

View file

@ -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

View file

@ -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,
}) })

View file

@ -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}")