diff --git a/utils/registry/build-index.py b/utils/registry/build-index.py index 42e55fecf..b32034972 100755 --- a/utils/registry/build-index.py +++ b/utils/registry/build-index.py @@ -188,6 +188,7 @@ def run(path: str = "."): netindex.append((v[0], net.network.network_address.exploded, net.network.broadcast_address.exploded, + net.network.prefixlen, net.policy, net.status, ",".join(net.mnters))) print("Writing .netindex", file=sys.stderr) diff --git a/utils/registry/dom/filedom.py b/utils/registry/dom/filedom.py index be1f79f56..05d365591 100644 --- a/utils/registry/dom/filedom.py +++ b/utils/registry/dom/filedom.py @@ -70,7 +70,10 @@ class Row(NamedTuple): class FileDOM: """Parses a reg file""" - def __init__(self, src: Optional[str] = None, ns: Optional[str] = "dn42"): + def __init__(self, + text: Optional[Sequence[str]] = None, + src: Optional[str] = None, + ns: Optional[str] = "dn42"): self.valid = False self.dom = [] # type: List[Row] self.keys = {} # type: Dict[str, int] @@ -79,7 +82,10 @@ class FileDOM: self.src = src self.ns = ns - def parse(self, input_str: Sequence[str], src: Optional[str] = None): + if text is not None: + self.parse(text, src=src) + + def parse(self, text: Sequence[str], src: Optional[str] = None): """Parse an input string generator""" dom = [] keys = {} @@ -89,7 +95,7 @@ class FileDOM: self.valid = False self.src = self.src if src is None else src - for lineno, i in enumerate(input_str, 1): + for lineno, i in enumerate(text, 1): # print(lineno, i) if re.match(r'[ \t]', i): if len(dom) == 0: @@ -150,6 +156,12 @@ class FileDOM: @property def name(self) -> str: """return the friendly name for file""" + if self.schema in ("inetnum", "inet6num"): + return self.get("cidr").value + + if self.schema in ("person", "role"): + return self.get("nic-hdl").value + if len(self.dom) < 1: return "none" @@ -217,7 +229,6 @@ class FileDOM: def read_file(fn: str) -> FileDOM: """Parses FileDOM from file""" with open(fn, mode='r', encoding='utf-8') as f: - dom = FileDOM(src=fn) - dom.parse(f.readlines()) + dom = FileDOM(src=fn, text=f.readlines()) return dom diff --git a/utils/registry/dom/schema.py b/utils/registry/dom/schema.py index 026610a98..6902931dc 100644 --- a/utils/registry/dom/schema.py +++ b/utils/registry/dom/schema.py @@ -58,7 +58,9 @@ class State: class SchemaDOM: """Schema DOM""" - def __init__(self, src: Optional[str] = None): + def __init__(self, + dom: Optional[FileDOM] = None, + src: Optional[str] = None): self.valid = False self.name = None self.ref = None @@ -69,6 +71,9 @@ class SchemaDOM: self._spec = {} # type: Dict[str, str] self._links = {} # type: Dict[str, List[str]] + if dom is not None: + self.parse(dom) + @property def links(self) -> Dict[str, List[str]]: "return schema links" @@ -224,10 +229,9 @@ class SchemaDOM: def read_file(src: str) -> SchemaDOM: """Parses SchemaDOM from file""" with open(src, mode='r', encoding='utf-8') as f: - dom = FileDOM(src=src) - dom.parse(f.readlines()) + dom = FileDOM(src=src, text=f.readlines()) - return SchemaDOM().parse(dom) + return SchemaDOM(dom=dom) def inetnum_check(state: State, dom: FileDOM) -> State: diff --git a/utils/registry/dom/test_filedom.py b/utils/registry/dom/test_filedom.py index f1c9a9624..4fb888538 100644 --- a/utils/registry/dom/test_filedom.py +++ b/utils/registry/dom/test_filedom.py @@ -79,8 +79,7 @@ class TestFileDOM(unittest.TestCase): s = inspect.cleandoc(s)+"\n" - dom = FileDOM() - dom.parse(s.splitlines()) + dom = FileDOM(text=s.splitlines()) cidr = dom.get("cidr").as_net self.assertEqual(cidr.compressed, "fd00::/8") @@ -102,8 +101,7 @@ class TestFileDOM(unittest.TestCase): s = inspect.cleandoc(s)+"\n" - dom = FileDOM() - dom.parse(s.splitlines()) + dom = FileDOM(text=s.splitlines()) cidr = dom.get("cidr").as_net self.assertEqual(cidr.compressed, "172.20.0.0/14") diff --git a/utils/registry/example/person/XU0-DN42 b/utils/registry/example/person/XU0-DN42 deleted file mode 100644 index 0428e4c15..000000000 --- a/utils/registry/example/person/XU0-DN42 +++ /dev/null @@ -1,8 +0,0 @@ -person: Xuu -remarks: test -contact: xmpp:xuu@xmpp.dn42 -contact: mail:xuu@dn42.us -pgp-fingerprint: 20AE2F310A74EA7CEC3AE69F8B3B0604F164E04F -nic-hdl: XU0-DN42 -mnt-by: XU0-MNT -source: DN42