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:
parent
e8e57bb932
commit
c6df6c5452
1 changed files with 90 additions and 0 deletions
90
scripts/pyaccuwage-checkseq.py
Executable file
90
scripts/pyaccuwage-checkseq.py
Executable 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()
|
Loading…
Add table
Add a link
Reference in a new issue