mirror of
https://git.dn42.dev/dn42/registry.git
synced 2025-05-08 21:55:21 +08:00
add tranaction support
This commit is contained in:
parent
4cb15e7c78
commit
df8054d429
5 changed files with 27 additions and 21 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
Loading…
Add table
Reference in a new issue