mirror of
https://git.dn42.dev/dn42/registry.git
synced 2025-05-09 06:05:22 +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],
|
netindex.append((v[0],
|
||||||
net.network.network_address.exploded,
|
net.network.network_address.exploded,
|
||||||
net.network.broadcast_address.exploded,
|
net.network.broadcast_address.exploded,
|
||||||
|
net.network.prefixlen,
|
||||||
net.policy, net.status, ",".join(net.mnters)))
|
net.policy, net.status, ",".join(net.mnters)))
|
||||||
|
|
||||||
print("Writing .netindex", file=sys.stderr)
|
print("Writing .netindex", file=sys.stderr)
|
||||||
|
|
|
@ -70,7 +70,10 @@ class Row(NamedTuple):
|
||||||
class FileDOM:
|
class FileDOM:
|
||||||
"""Parses a reg file"""
|
"""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.valid = False
|
||||||
self.dom = [] # type: List[Row]
|
self.dom = [] # type: List[Row]
|
||||||
self.keys = {} # type: Dict[str, int]
|
self.keys = {} # type: Dict[str, int]
|
||||||
|
@ -79,7 +82,10 @@ class FileDOM:
|
||||||
self.src = src
|
self.src = src
|
||||||
self.ns = ns
|
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"""
|
"""Parse an input string generator"""
|
||||||
dom = []
|
dom = []
|
||||||
keys = {}
|
keys = {}
|
||||||
|
@ -89,7 +95,7 @@ class FileDOM:
|
||||||
self.valid = False
|
self.valid = False
|
||||||
self.src = self.src if src is None else src
|
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)
|
# print(lineno, i)
|
||||||
if re.match(r'[ \t]', i):
|
if re.match(r'[ \t]', i):
|
||||||
if len(dom) == 0:
|
if len(dom) == 0:
|
||||||
|
@ -150,6 +156,12 @@ class FileDOM:
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
"""return the friendly name for file"""
|
"""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:
|
if len(self.dom) < 1:
|
||||||
return "none"
|
return "none"
|
||||||
|
|
||||||
|
@ -217,7 +229,6 @@ class FileDOM:
|
||||||
def read_file(fn: str) -> FileDOM:
|
def read_file(fn: str) -> FileDOM:
|
||||||
"""Parses FileDOM from file"""
|
"""Parses FileDOM from file"""
|
||||||
with open(fn, mode='r', encoding='utf-8') as f:
|
with open(fn, mode='r', encoding='utf-8') as f:
|
||||||
dom = FileDOM(src=fn)
|
dom = FileDOM(src=fn, text=f.readlines())
|
||||||
dom.parse(f.readlines())
|
|
||||||
|
|
||||||
return dom
|
return dom
|
||||||
|
|
|
@ -58,7 +58,9 @@ class State:
|
||||||
|
|
||||||
class SchemaDOM:
|
class SchemaDOM:
|
||||||
"""Schema DOM"""
|
"""Schema DOM"""
|
||||||
def __init__(self, src: Optional[str] = None):
|
def __init__(self,
|
||||||
|
dom: Optional[FileDOM] = None,
|
||||||
|
src: Optional[str] = None):
|
||||||
self.valid = False
|
self.valid = False
|
||||||
self.name = None
|
self.name = None
|
||||||
self.ref = None
|
self.ref = None
|
||||||
|
@ -69,6 +71,9 @@ class SchemaDOM:
|
||||||
self._spec = {} # type: Dict[str, str]
|
self._spec = {} # type: Dict[str, str]
|
||||||
self._links = {} # type: Dict[str, List[str]]
|
self._links = {} # type: Dict[str, List[str]]
|
||||||
|
|
||||||
|
if dom is not None:
|
||||||
|
self.parse(dom)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def links(self) -> Dict[str, List[str]]:
|
def links(self) -> Dict[str, List[str]]:
|
||||||
"return schema links"
|
"return schema links"
|
||||||
|
@ -224,10 +229,9 @@ class SchemaDOM:
|
||||||
def read_file(src: str) -> SchemaDOM:
|
def read_file(src: str) -> SchemaDOM:
|
||||||
"""Parses SchemaDOM from file"""
|
"""Parses SchemaDOM from file"""
|
||||||
with open(src, mode='r', encoding='utf-8') as f:
|
with open(src, mode='r', encoding='utf-8') as f:
|
||||||
dom = FileDOM(src=src)
|
dom = FileDOM(src=src, text=f.readlines())
|
||||||
dom.parse(f.readlines())
|
|
||||||
|
|
||||||
return SchemaDOM().parse(dom)
|
return SchemaDOM(dom=dom)
|
||||||
|
|
||||||
|
|
||||||
def inetnum_check(state: State, dom: FileDOM) -> State:
|
def inetnum_check(state: State, dom: FileDOM) -> State:
|
||||||
|
|
|
@ -79,8 +79,7 @@ class TestFileDOM(unittest.TestCase):
|
||||||
|
|
||||||
s = inspect.cleandoc(s)+"\n"
|
s = inspect.cleandoc(s)+"\n"
|
||||||
|
|
||||||
dom = FileDOM()
|
dom = FileDOM(text=s.splitlines())
|
||||||
dom.parse(s.splitlines())
|
|
||||||
|
|
||||||
cidr = dom.get("cidr").as_net
|
cidr = dom.get("cidr").as_net
|
||||||
self.assertEqual(cidr.compressed, "fd00::/8")
|
self.assertEqual(cidr.compressed, "fd00::/8")
|
||||||
|
@ -102,8 +101,7 @@ class TestFileDOM(unittest.TestCase):
|
||||||
|
|
||||||
s = inspect.cleandoc(s)+"\n"
|
s = inspect.cleandoc(s)+"\n"
|
||||||
|
|
||||||
dom = FileDOM()
|
dom = FileDOM(text=s.splitlines())
|
||||||
dom.parse(s.splitlines())
|
|
||||||
|
|
||||||
cidr = dom.get("cidr").as_net
|
cidr = dom.get("cidr").as_net
|
||||||
self.assertEqual(cidr.compressed, "172.20.0.0/14")
|
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