Skip to content

Commit accf599

Browse files
author
Joshua Rogers
committed
Log the filename of a skipped block
1 parent 8ef1d19 commit accf599

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

gixy/parser/nginx_parser.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,45 +50,51 @@ def parse(self, content, root=None, path_info=None):
5050
# Were parse nginx dump
5151
LOG.info("Switched to parse nginx configuration dump.")
5252
root_filename = self._prepare_dump(parsed)
53+
path_info = root_filename
5354
self.is_dump = True
5455
self.cwd = os.path.dirname(root_filename)
5556
parsed = self.configs[root_filename]
5657

57-
self.parse_block(parsed, root)
58+
self.parse_block(parsed, root, path_info)
5859
return root
5960

60-
def parse_block(self, parsed_block, parent):
61+
def parse_block(self, parsed_block, parent, path_info):
6162
for parsed in parsed_block:
6263
parsed_type = parsed.getName()
64+
line = parsed.get('line', None)
6365
parsed_name = parsed[0]
66+
parsed_info = {parsed_name: line}
6467
parsed_args = parsed[1:]
6568
if parsed_type == "include":
6669
# TODO: WTF?!
67-
self._resolve_include(parsed_args, parent)
70+
self._resolve_include(parsed_args, parent, path_info)
6871
else:
6972
directive_inst = self.directive_factory(
70-
parsed_type, parsed_name, parsed_args
73+
parsed_type, parsed_info, parsed_args, path_info
7174
)
7275
if directive_inst:
7376
parent.append(directive_inst)
7477

75-
def directive_factory(self, parsed_type, parsed_name, parsed_args):
76-
klass = self._get_directive_class(parsed_type, parsed_name)
78+
def directive_factory(self, parsed_type, parsed_info, parsed_args, path_info):
79+
klass = self._get_directive_class(parsed_type, parsed_info, path_info)
7780
if not klass:
7881
return None
7982

83+
parsed_name = list(parsed_info.keys())[0]
8084
if klass.is_block:
8185
args = [to_native(v).strip() for v in parsed_args[0]]
8286
children = parsed_args[1]
8387

8488
inst = klass(parsed_name, args)
85-
self.parse_block(children, inst)
89+
self.parse_block(children, inst, path_info)
8690
return inst
8791
else:
8892
args = [to_native(v).strip() for v in parsed_args]
8993
return klass(parsed_name, args)
9094

91-
def _get_directive_class(self, parsed_type, parsed_name):
95+
def _get_directive_class(self, parsed_type, parsed_info, path_info):
96+
parsed_name = list(parsed_info.keys())[0]
97+
parsed_line = parsed_info.get(parsed_name, '<unknown>')
9298
if (
9399
parsed_type in self.directives
94100
and parsed_name in self.directives[parsed_type]
@@ -99,7 +105,7 @@ def _get_directive_class(self, parsed_type, parsed_name):
99105
elif parsed_type == "directive":
100106
return directive.Directive
101107
elif parsed_type == "unparsed_block":
102-
LOG.warning('Skip unparseable block: "%s"', parsed_name)
108+
LOG.warning('Skip unparseable block in %s beginning at line %s: "%s"', path_info, parsed_line, parsed_name)
103109
return None
104110
else:
105111
return None
@@ -108,7 +114,7 @@ def _init_directives(self):
108114
self.directives["block"] = block.get_overrides()
109115
self.directives["directive"] = directive.get_overrides()
110116

111-
def _resolve_include(self, args, parent):
117+
def _resolve_include(self, args, parent, path_info):
112118
pattern = args[0]
113119
# TODO(buglloc): maybe file providers?
114120
if self.is_dump:
@@ -117,9 +123,9 @@ def _resolve_include(self, args, parent):
117123
LOG.debug("Includes are disallowed, skip: {0}".format(pattern))
118124
return
119125

120-
return self._resolve_file_include(pattern=pattern, parent=parent)
126+
return self._resolve_file_include(pattern=pattern, parent=parent, path_info)
121127

122-
def _resolve_file_include(self, pattern, parent):
128+
def _resolve_file_include(self, pattern, parent, path_info):
123129
path = os.path.join(self.cwd, pattern)
124130
exists = False
125131
for file_path in glob.iglob(path):
@@ -140,7 +146,7 @@ def _resolve_dump_include(self, pattern, parent):
140146
founded = True
141147
include = block.IncludeBlock("include", [file_path])
142148
parent.append(include)
143-
self.parse_block(parsed, include)
149+
self.parse_block(parsed, include, file_path)
144150

145151
if not founded:
146152
LOG.warning("File not found: {0}".format(path))

0 commit comments

Comments
 (0)