From c6df6c54528f173cb2b82984a8838d4823a42b94 Mon Sep 17 00:00:00 2001 From: Binh Nguyen Date: Sat, 30 Mar 2013 13:15:23 -0500 Subject: [PATCH] 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. --- scripts/pyaccuwage-checkseq.py | 90 ++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 scripts/pyaccuwage-checkseq.py diff --git a/scripts/pyaccuwage-checkseq.py b/scripts/pyaccuwage-checkseq.py new file mode 100755 index 0000000..fcf3ab0 --- /dev/null +++ b/scripts/pyaccuwage-checkseq.py @@ -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()