the sequence comments are returned as string tuples. Next step is to take these results, convert them to integers, and make sure they occur in the expected linear order.
90 lines
2.5 KiB
Python
Executable file
90 lines
2.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
from pyaccuwage import model as pyaccuwagemodel
|
|
import argparse
|
|
import sys
|
|
import os
|
|
import re
|
|
|
|
parser = argparse.ArgumentParser(description="Check pyaccuwage record models for sequence errors.")
|
|
parser.add_argument("-i", "--input",
|
|
nargs=1,
|
|
required=True,
|
|
metavar="file",
|
|
type=argparse.FileType('r'),
|
|
help="Source file to be checked")
|
|
|
|
args = parser.parse_args()
|
|
|
|
class ClassEntry(object):
|
|
re_rangecomment = re.compile('#\s+(\d+)\-?(\d*)$')
|
|
|
|
def __init__(self, classname, subclassof):
|
|
self.classname = classname
|
|
self.subclassof = subclassof
|
|
self.lines = []
|
|
|
|
def add_line(self, line):
|
|
self.lines.append(line)
|
|
|
|
def validate(self):
|
|
for line in self.lines:
|
|
match = self.re_rangecomment.search(line)
|
|
if match:
|
|
print match.groups()
|
|
|
|
class ModelDefParser(object):
|
|
re_triplequote = re.compile('"""')
|
|
re_whitespace = re.compile("^(\s*)[^\s]+")
|
|
re_classdef = re.compile(r"^\s*class\s(.*)\((.*)\):\s*$")
|
|
|
|
def __init__(self, infile):
|
|
self.infile = infile
|
|
|
|
def endclass(self):
|
|
if self.current_class:
|
|
self.current_class.validate()
|
|
self.current_class = None
|
|
|
|
def beginclass(self, classname, subclass_of):
|
|
self.current_class = ClassEntry(classname, subclass_of)
|
|
|
|
def parse(self):
|
|
infile = self.infile
|
|
whitespace = 0
|
|
in_block_comment = False
|
|
self.current_class = None
|
|
|
|
for line in infile:
|
|
if line.startswith('#'):
|
|
continue
|
|
|
|
if self.re_triplequote.search(line):
|
|
in_block_comment = not in_block_comment
|
|
|
|
if in_block_comment:
|
|
continue
|
|
|
|
match_whitespace = self.re_whitespace.match(line)
|
|
if match_whitespace:
|
|
match_whitespace = len(match_whitespace.groups()[0])
|
|
else:
|
|
match_whitespace = 0
|
|
|
|
classmatch = self.re_classdef.match(line)
|
|
if classmatch:
|
|
classname, subclass = classmatch.groups()
|
|
self.beginclass(classname, subclass)
|
|
continue
|
|
|
|
print match_whitespace
|
|
if match_whitespace < whitespace:
|
|
whitespace = match_whitespace
|
|
self.endclass()
|
|
continue
|
|
|
|
if self.current_class:
|
|
whitespace = match_whitespace
|
|
self.current_class.add_line(line)
|
|
|
|
parser = ModelDefParser(args.input[0])
|
|
parser.parse()
|