mirror of
https://git.dn42.dev/dn42/registry.git
synced 2025-07-20 09:26:59 +08:00
fixes to handle unparsable files
This commit is contained in:
parent
6b6eae06ec
commit
fef09c2f22
1 changed files with 49 additions and 36 deletions
|
@ -16,14 +16,11 @@ SCHEMA_NAMESPACE = "dn42."
|
||||||
|
|
||||||
|
|
||||||
class SchemaDOM:
|
class SchemaDOM:
|
||||||
src = None
|
|
||||||
schema = None
|
|
||||||
name = None
|
|
||||||
ref = None
|
|
||||||
primary = None
|
|
||||||
type = None
|
|
||||||
|
|
||||||
def __init__(self, fn):
|
def __init__(self, fn):
|
||||||
|
self.name = None
|
||||||
|
self.ref = None
|
||||||
|
self.primary = None
|
||||||
|
self.type = None
|
||||||
self.src = fn
|
self.src = fn
|
||||||
f = FileDOM(fn)
|
f = FileDOM(fn)
|
||||||
self.schema = self.__parse_schema(f)
|
self.schema = self.__parse_schema(f)
|
||||||
|
@ -78,6 +75,10 @@ class SchemaDOM:
|
||||||
|
|
||||||
def check_file(self, f, lookups=None):
|
def check_file(self, f, lookups=None):
|
||||||
status = "PASS"
|
status = "PASS"
|
||||||
|
if not f.valid:
|
||||||
|
log.error("%s Line 0: File does not parse" % (f.src))
|
||||||
|
status = "FAIL"
|
||||||
|
|
||||||
for k, v in self.schema.items():
|
for k, v in self.schema.items():
|
||||||
if 'required' in v and k not in f.keys:
|
if 'required' in v and k not in f.keys:
|
||||||
log.error(
|
log.error(
|
||||||
|
@ -150,18 +151,28 @@ class SchemaDOM:
|
||||||
class FileDOM:
|
class FileDOM:
|
||||||
|
|
||||||
def __init__(self, fn):
|
def __init__(self, fn):
|
||||||
|
self.valid = True
|
||||||
|
self.dom = []
|
||||||
|
self.keys = {}
|
||||||
|
self.multi = {}
|
||||||
|
self.mntner = []
|
||||||
|
self.schema = None
|
||||||
|
self.src = fn
|
||||||
|
|
||||||
|
with open(fn, mode='r', encoding='utf-8') as f:
|
||||||
dom = []
|
dom = []
|
||||||
keys = {}
|
keys = {}
|
||||||
multi = {}
|
multi = {}
|
||||||
mntner = []
|
mntner = []
|
||||||
last_multi = None
|
last_multi = None
|
||||||
schema = None
|
|
||||||
src = fn
|
|
||||||
|
|
||||||
with open(fn, mode='r', encoding='utf-8') as f:
|
|
||||||
for lineno, i in enumerate(f.readlines(), 1):
|
for lineno, i in enumerate(f.readlines(), 1):
|
||||||
|
|
||||||
if re.match(r'[ \t]', i):
|
if re.match(r'[ \t]', i):
|
||||||
|
if len(dom) == 0:
|
||||||
|
log.error("File %s does not parse properly" % (fn) )
|
||||||
|
self.valid = False
|
||||||
|
return
|
||||||
|
|
||||||
dom[-1][1] += "\n" + i.strip()
|
dom[-1][1] += "\n" + i.strip()
|
||||||
|
|
||||||
if dom[-1][0] not in multi:
|
if dom[-1][0] not in multi:
|
||||||
|
@ -193,7 +204,6 @@ class FileDOM:
|
||||||
self.multi = multi
|
self.multi = multi
|
||||||
self.mntner = mntner
|
self.mntner = mntner
|
||||||
self.schema = SCHEMA_NAMESPACE + dom[0][0]
|
self.schema = SCHEMA_NAMESPACE + dom[0][0]
|
||||||
self.src = src
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
length = 19
|
length = 19
|
||||||
|
@ -275,11 +285,12 @@ def scan_files(path, mntner=None, use_file=None):
|
||||||
idx = {}
|
idx = {}
|
||||||
schemas = {}
|
schemas = {}
|
||||||
|
|
||||||
for line in arr:
|
for dom in arr:
|
||||||
|
line = (dom.schema, dom.src.split("/")[-1].replace("_", "/"), dom.src, ",".join(dom.mntner), dom)
|
||||||
|
|
||||||
idx[(line[0], line[1])] = line[2:]
|
idx[(line[0], line[1])] = line[2:]
|
||||||
if line[0] == SCHEMA_NAMESPACE + 'schema':
|
if line[0] == SCHEMA_NAMESPACE + 'schema':
|
||||||
s = SchemaDOM(line[2])
|
s = SchemaDOM(line[2])
|
||||||
log.info("read schema: %s" % (s.name))
|
|
||||||
schemas[s.ref] = s
|
schemas[s.ref] = s
|
||||||
|
|
||||||
return __scan_index(idx, schemas, mntner, use_file)
|
return __scan_index(idx, schemas, mntner, use_file)
|
||||||
|
@ -287,7 +298,16 @@ def scan_files(path, mntner=None, use_file=None):
|
||||||
def __scan_index(idx, schemas, mntner, use_file):
|
def __scan_index(idx, schemas, mntner, use_file):
|
||||||
ok = True
|
ok = True
|
||||||
for k, v in idx.items():
|
for k, v in idx.items():
|
||||||
log.debug(k)
|
if use_file is not None and use_file != v[0]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
s = schemas.get(k[0], None)
|
||||||
|
if s is None:
|
||||||
|
log.error("No schema found for %s" % (k[1]))
|
||||||
|
print("CHECK\t%-54s\tFAIL\tMNTNERS: UNKNOWN" %(v[2].src))
|
||||||
|
ok = "FAIL"
|
||||||
|
|
||||||
|
else:
|
||||||
mlist = []
|
mlist = []
|
||||||
if len(v) > 1:
|
if len(v) > 1:
|
||||||
mlist = v[1].split(",")
|
mlist = v[1].split(",")
|
||||||
|
@ -295,21 +315,14 @@ def __scan_index(idx, schemas, mntner, use_file):
|
||||||
if mntner is not None and mntner not in mlist:
|
if mntner is not None and mntner not in mlist:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if use_file is not None and use_file != v[0]:
|
|
||||||
continue
|
|
||||||
|
|
||||||
s = schemas.get(k[0], None)
|
c = v[2]
|
||||||
if s is None:
|
|
||||||
log.error("No schema found for %s" % (k[1]))
|
|
||||||
ok = False
|
|
||||||
continue
|
|
||||||
c = FileDOM(v[0])
|
|
||||||
ck = s.check_file(c, idx.keys())
|
ck = s.check_file(c, idx.keys())
|
||||||
|
|
||||||
if ck == "INFO" and ok != "FAIL":
|
if ck == "INFO" and ok != "FAIL":
|
||||||
ok = ck
|
ok = ck
|
||||||
if ck == "FAIL":
|
if ck == "FAIL":
|
||||||
ok = ck
|
ok = ck
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
def __index_files(path, use_file):
|
def __index_files(path, use_file):
|
||||||
|
@ -342,11 +355,11 @@ def __index_files(path, use_file):
|
||||||
|
|
||||||
for f in files:
|
for f in files:
|
||||||
dom = FileDOM(os.path.join(root, f))
|
dom = FileDOM(os.path.join(root, f))
|
||||||
yield (dom.schema, dom.src.split("/")[-1].replace("_", "/"), dom.src, ",".join(dom.mntner))
|
yield dom
|
||||||
|
|
||||||
if use_file is not None:
|
if use_file is not None:
|
||||||
dom = FileDOM(use_file)
|
dom = FileDOM(use_file)
|
||||||
yield (dom.schema, dom.src.split("/")[-1].replace("_", "/"), dom.src, ",".join(dom.mntner))
|
yield dom
|
||||||
|
|
||||||
def index_files(path):
|
def index_files(path):
|
||||||
idx = __index_files(path)
|
idx = __index_files(path)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue