CORD-2247: Write basic static checker for xproto
Change-Id: I63a96972e16fd8dd62d4dec840eede66cbb26368
diff --git a/lib/xos-genx/xosgenx/generator.py b/lib/xos-genx/xosgenx/generator.py
index 650e688..33e96b1 100755
--- a/lib/xos-genx/xosgenx/generator.py
+++ b/lib/xos-genx/xosgenx/generator.py
@@ -26,7 +26,7 @@
loader = jinja2.PackageLoader(__name__, 'templates')
env = jinja2.Environment(loader=loader)
-class XOSGenerator:
+class XOSProcessor:
@staticmethod
def _read_input_from_files(files):
@@ -78,8 +78,8 @@
@staticmethod
def _load_jinja2_extensions(os_template_env, attic):
- os_template_env.globals['include_file'] = XOSGenerator._include_file(attic) # Generates a function
- os_template_env.globals['file_exists'] = XOSGenerator._file_exists(attic) # Generates a function
+ os_template_env.globals['include_file'] = XOSProcessor._include_file(attic) # Generates a function
+ os_template_env.globals['file_exists'] = XOSProcessor._file_exists(attic) # Generates a function
os_template_env.filters['yaml'] = yaml.dump
for f in dir(jinja2_extensions):
@@ -168,8 +168,7 @@
return ne_pointer
@staticmethod
- def generate(args):
-
+ def process(args, operator = None):
# Setting defaults
if not hasattr(args, 'attic'):
args.attic = None
@@ -196,19 +195,25 @@
raise Exception("[XosGenX] The output dir must be a directory!")
if hasattr(args, 'files'):
- inputs = XOSGenerator._read_input_from_files(args.files)
+ inputs = XOSProcessor._read_input_from_files(args.files)
elif hasattr(args, 'inputs'):
inputs = args.inputs
else:
raise Exception("[XosGenX] No inputs provided!")
- template_path = XOSGenerator._get_template(args.target)
+ if not operator:
+ operator = args.target
+ template_path = XOSProcessor._get_template(operator)
+ else:
+ template_path = operator
+
+
[template_folder, template_name] = os.path.split(template_path)
os_template_loader = jinja2.FileSystemLoader(searchpath=[template_folder])
os_template_env = jinja2.Environment(loader=os_template_loader)
- os_template_env = XOSGenerator._load_jinja2_extensions(os_template_env, args.attic)
+ os_template_env = XOSProcessor._load_jinja2_extensions(os_template_env, args.attic)
template = os_template_env.get_template(template_name)
- context = XOSGenerator._add_context(args)
+ context = XOSProcessor._add_context(args)
parser = plyxproto.ProtobufAnalyzer()
try:
@@ -216,7 +221,7 @@
except plyxproto.ParsingError, e:
line, start, end = e.error_range
- ptr = XOSGenerator._find_last_nonempty_line(inputs, start)
+ ptr = XOSProcessor._find_last_nonempty_line(inputs, start)
if start == 0:
beginning = ''
@@ -236,14 +241,14 @@
exit(1)
- v = XOSGenerator._attach_parser(ast, args)
+ v = XOSProcessor._attach_parser(ast, args)
if args.output is not None and args.write_to_file == "model":
rendered = {}
for i, model in enumerate(v.models):
models = {}
models[model] = v.models[model]
- messages = [XOSGenerator._find_message_by_model_name(v.messages, model)]
+ messages = [XOSProcessor._find_message_by_model_name(v.messages, model)]
rendered[model] = template.render(
{"proto":
@@ -257,7 +262,7 @@
"options": v.options
}
)
- XOSGenerator._write_file_per_model(rendered, args.output, args.dest_extension, args.quiet)
+ XOSProcessor._write_file_per_model(rendered, args.output, args.dest_extension, args.quiet)
else:
rendered = template.render(
{"proto":
@@ -272,8 +277,8 @@
}
)
if args.output is not None and args.write_to_file == "target":
- XOSGenerator._write_split_target(rendered, args.output, args.quiet)
+ XOSProcessor._write_split_target(rendered, args.output, args.quiet)
elif args.output is not None and args.write_to_file == "single":
- XOSGenerator._write_single_file(rendered, args.output, args.dest_file, args.quiet)
+ XOSProcessor._write_single_file(rendered, args.output, args.dest_file, args.quiet)
return rendered