Added pyaccuwage-checkseq. Everything works so far, currently

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.
This commit is contained in:
Binh 2013-03-30 13:15:23 -05:00
parent e8e57bb932
commit c6df6c5452

90
scripts/pyaccuwage-checkseq.py Executable file
View file

@ -0,0 +1,90 @@
#!/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()