add tranaction support

This commit is contained in:
Jonathan Lundy 2020-06-12 16:28:03 -06:00
parent 4cb15e7c78
commit df8054d429
No known key found for this signature in database
GPG key ID: C63E6D61F3035024
5 changed files with 27 additions and 21 deletions

View file

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

View file

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

View file

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

View file

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

View file

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