parent
89635aafbf
commit
d2b62206fd
@ -1,11 +1,97 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""add module description
|
||||||
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
argparser = argparse.ArgumentParser()
|
import re
|
||||||
|
|
||||||
|
__author__ = "Michał Słomkowski"
|
||||||
|
__license__ = "Apache 2.0"
|
||||||
|
|
||||||
|
INDENTATION = ' ' * 4
|
||||||
|
|
||||||
|
|
||||||
|
def strip_line(single_line):
|
||||||
|
within_quotes = False
|
||||||
|
parts = []
|
||||||
|
for part in re.split('"', single_line.strip()):
|
||||||
|
if within_quotes:
|
||||||
|
parts.append(part)
|
||||||
|
else:
|
||||||
|
parts.append(re.sub(r'[\s]+', ' ', part))
|
||||||
|
within_quotes = not within_quotes
|
||||||
|
return '"'.join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
def clean_lines(orig_lines):
|
||||||
|
cleaned_lines = []
|
||||||
|
for line in orig_lines:
|
||||||
|
line = strip_line(line)
|
||||||
|
if line == "":
|
||||||
|
cleaned_lines.append("")
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
cleaned_lines.extend([l.strip() for l in re.split("([\\{\\}])", line) if l != ""])
|
||||||
|
|
||||||
|
return cleaned_lines
|
||||||
|
|
||||||
|
|
||||||
|
def join_opening_parenthesis(lines):
|
||||||
|
modified_lines = []
|
||||||
|
for i in range(len(lines)):
|
||||||
|
if i > 0 and lines[i] == "{":
|
||||||
|
modified_lines[-1] += " {"
|
||||||
|
else:
|
||||||
|
modified_lines.append(lines[i])
|
||||||
|
return modified_lines
|
||||||
|
|
||||||
|
|
||||||
|
def perform_indentation(lines):
|
||||||
|
indented_lines = []
|
||||||
|
current_indent = 0
|
||||||
|
for line in lines:
|
||||||
|
if line.endswith('}') and current_indent > 0:
|
||||||
|
current_indent -= 1
|
||||||
|
|
||||||
|
indented_lines.append(current_indent * INDENTATION + line)
|
||||||
|
|
||||||
|
if line.endswith('{'):
|
||||||
|
current_indent += 1
|
||||||
|
|
||||||
|
return indented_lines
|
||||||
|
|
||||||
|
|
||||||
|
def format_config_file(contents):
|
||||||
|
lines = clean_lines(contents.splitlines())
|
||||||
|
lines = join_opening_parenthesis(lines)
|
||||||
|
lines = perform_indentation(lines)
|
||||||
|
|
||||||
|
return '\n'.join(lines) + '\n'
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
argparser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
|
||||||
|
argparser.add_argument("-v", "--verbose", action="store_true", help="show formatted file names")
|
||||||
|
argparser.add_argument("-b", "--backup-original", action="store_true", help="backup original config file")
|
||||||
|
argparser.add_argument("config_file", type=argparse.FileType('r'), nargs='+')
|
||||||
|
|
||||||
|
args = argparser.parse_args()
|
||||||
|
|
||||||
|
for config_file in args.config_file:
|
||||||
|
original_file_content = config_file.read()
|
||||||
|
config_file.close()
|
||||||
|
|
||||||
argparser.add_argument("-v", "--verbose", action="store_true", help="show formatted file names")
|
with open(config_file.name, 'w') as fp:
|
||||||
argparser.add_argument("-b", "--backup-original", action="store_true", help="backup original config file")
|
fp.write(format_config_file(original_file_content))
|
||||||
argparser.add_argument("config_file", type=argparse.FileType('r'), nargs='+')
|
if args.verbose:
|
||||||
|
print("Formatted file %s" % config_file.name)
|
||||||
|
|
||||||
args = argparser.parse_args()
|
if args.backup_original:
|
||||||
|
backup_file_path = config_file.name + '~'
|
||||||
|
with open(backup_file_path, 'w') as fp:
|
||||||
|
fp.write(original_file_content)
|
||||||
|
if args.verbose:
|
||||||
|
print("Original saved to %s" % backup_file_path)
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
import unittest
|
||||||
|
|
||||||
|
from nginxfmt import *
|
||||||
|
|
||||||
|
|
||||||
|
class TestFormatter(unittest.TestCase):
|
||||||
|
def _check_formatting(self, original_text, formatted_text):
|
||||||
|
self.assertEqual(formatted_text, format_config_file(original_text))
|
||||||
|
|
||||||
|
def test_join_opening_parenthesis(self):
|
||||||
|
self.assertEqual(["foo", "bar {", "johan {", "tee", "ka", "}"],
|
||||||
|
join_opening_parenthesis(("foo", "bar {", "johan", "{", "tee", "ka", "}")))
|
||||||
|
|
||||||
|
def test_clear_lines(self):
|
||||||
|
self.assertEqual(["ala", "ma", "{", "kota", "}", "to;", "", "ook"],
|
||||||
|
clean_lines(("ala", "ma {", "kota", "}", "to;", "", "ook")))
|
||||||
|
|
||||||
|
self.assertEqual(["ala", "ma", "{", "{", "kota", "}", "to", "}", "ook"],
|
||||||
|
clean_lines(("ala", "ma {{", "kota", "}", "to}", "ook")))
|
||||||
|
|
||||||
|
self.assertEqual(["{", "ala", "ma", "{", "{", "kota", "}", "to", "}"],
|
||||||
|
clean_lines(("{", "ala ", "ma {{", " kota ", "}", " to} ")))
|
||||||
|
|
||||||
|
def test_perform_indentation(self):
|
||||||
|
self.assertEqual([
|
||||||
|
"foo bar {",
|
||||||
|
" fizz bazz;",
|
||||||
|
"}"], perform_indentation(("foo bar {", "fizz bazz;", "}")))
|
||||||
|
|
||||||
|
self.assertEqual([
|
||||||
|
"foo bar {",
|
||||||
|
" fizz bazz {",
|
||||||
|
" lorem ipsum;",
|
||||||
|
" asdf asdf;",
|
||||||
|
" }",
|
||||||
|
"}"], perform_indentation(("foo bar {", "fizz bazz {", "lorem ipsum;", "asdf asdf;", "}", "}")))
|
||||||
|
|
||||||
|
self.assertEqual([
|
||||||
|
"foo bar {",
|
||||||
|
" fizz bazz {",
|
||||||
|
" lorem ipsum;",
|
||||||
|
" }",
|
||||||
|
"}",
|
||||||
|
"}",
|
||||||
|
"foo {"], perform_indentation(("foo bar {", "fizz bazz {", "lorem ipsum;", "}", "}", "}", "foo {")))
|
||||||
|
|
||||||
|
def test_strip_line(self):
|
||||||
|
self.assertEqual("foo", strip_line(" foo "))
|
||||||
|
self.assertEqual("bar foo", strip_line(" bar foo "))
|
||||||
|
self.assertEqual("bar foo", strip_line(" bar \t foo "))
|
||||||
|
self.assertEqual('lorem ipsum " foo bar zip "', strip_line(' lorem ipsum " foo bar zip " '))
|
||||||
|
self.assertEqual('lorem ipsum " foo bar zip " or " dd aa " mi',
|
||||||
|
strip_line(' lorem ipsum " foo bar zip " or \t " dd aa " mi'))
|
||||||
|
|
||||||
|
def test_indentation(self):
|
||||||
|
self._check_formatting(
|
||||||
|
" foo bar {\n" +
|
||||||
|
" lorem ipsum;\n" +
|
||||||
|
"}",
|
||||||
|
"foo bar {\n" +
|
||||||
|
" lorem ipsum;\n" +
|
||||||
|
"}\n")
|
||||||
|
|
||||||
|
self._check_formatting(
|
||||||
|
" foo bar {\n" +
|
||||||
|
" lorem ipsum;\n" +
|
||||||
|
" kee {\n" +
|
||||||
|
"caak; \n" +
|
||||||
|
"}}",
|
||||||
|
"foo bar {\n" +
|
||||||
|
" lorem ipsum;\n" +
|
||||||
|
" kee {\n" +
|
||||||
|
" caak;\n" +
|
||||||
|
" }\n" +
|
||||||
|
"}\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Loading…
Reference in new issue