pyaccuwage/scripts/pyaccuwage-genfieldfill

51 lines
1.4 KiB
Python
Executable file

#!/usr/bin/env python
from pyaccuwage import model as pyaccuwagemodel
from pyaccuwage.modeldef import ModelDefParser, ClassEntryCommentSequence
import argparse
import sys
import os
import re
class ModelDefFFParser(ModelDefParser):
def __init__(self, infile, entryclass, wantedclass = None):
super(ModelDefFFParser, self).__init__(infile, entryclass)
self.wantedclass = wantedclass
def endclass(self):
if self.current_class:
if not self.wantedclass or self.wantedclass in self.current_class.classname:
self.current_class.process()
self.current_class = None
class ClassEntryFieldFill(ClassEntryCommentSequence):
def process(self):
print("# " + ''.join(self.classname))
print("def s(k,v):\n getattr(record, k).value = v\n")
for line in self.lines:
parts = line.strip().split()
if parts and not parts[0].startswith('blank'):
print( ("s('%s'," % parts[0]).ljust(50) + ')')
parser = argparse.ArgumentParser(
description="Generate prototype field filling commands from pyaccuwage model definition."
)
parser.add_argument("-i", "--input",
nargs=1,
required=True,
metavar="file",
type=argparse.FileType('r'),
help="Source file to generate")
parser.add_argument("-c", "--classname",
nargs=1,
required=False,
metavar="string",
default="",
help="Specific model to generate field fills from")
args = parser.parse_args()
parser = ModelDefFFParser(args.input[0], ClassEntryFieldFill, args.classname[0])
parser.parse()