diff --git a/bootstrapvz/common/minify_json.py b/bootstrapvz/common/minify_json.py deleted file mode 100644 index a24056b..0000000 --- a/bootstrapvz/common/minify_json.py +++ /dev/null @@ -1,112 +0,0 @@ -''' -Created on 20/01/2011 - -v0.1 (C) Gerald Storer -MIT License - -Based on JSON.minify.js: -https://github.com/getify/JSON.minify -''' - -import re - -def json_minify(json,strip_space=True): - tokenizer=re.compile('"|(/\*)|(\*/)|(//)|\n|\r') - in_string = False - in_multiline_comment = False - in_singleline_comment = False - - new_str = [] - from_index = 0 # from is a keyword in Python - - for match in re.finditer(tokenizer,json): - - if not in_multiline_comment and not in_singleline_comment: - tmp2 = json[from_index:match.start()] - if not in_string and strip_space: - tmp2 = re.sub('[ \t\n\r]*','',tmp2) # replace only white space defined in standard - new_str.append(tmp2) - - from_index = match.end() - - if match.group() == '"' and not in_multiline_comment and not in_singleline_comment: - escaped = re.search('(\\\\)*$',json[:match.start()]) - if not in_string or escaped is None or len(escaped.group()) % 2 == 0: - # start of string with ", or unescaped " character found to end string - in_string = not in_string - from_index -= 1 # include " character in next catch - - elif match.group() == '/*' and not in_string and not in_multiline_comment and not in_singleline_comment: - in_multiline_comment = True - elif match.group() == '*/' and not in_string and in_multiline_comment and not in_singleline_comment: - in_multiline_comment = False - elif match.group() == '//' and not in_string and not in_multiline_comment and not in_singleline_comment: - in_singleline_comment = True - elif (match.group() == '\n' or match.group() == '\r') and not in_string and not in_multiline_comment and in_singleline_comment: - in_singleline_comment = False - elif not in_multiline_comment and not in_singleline_comment and ( - match.group() not in ['\n','\r',' ','\t'] or not strip_space): - new_str.append(match.group()) - - new_str.append(json[from_index:]) - return ''.join(new_str) - -if __name__ == '__main__': - import json # requires Python 2.6+ to run tests - - def test_json(s): - return json.loads(json_minify(s)) - - test1 = '''// this is a JSON file with comments -{ - "foo": "bar", // this is cool - "bar": [ - "baz", "bum", "zam" - ], -/* the rest of this document is just fluff - in case you are interested. */ - "something": 10, - "else": 20 -} - -/* NOTE: You can easily strip the whitespace and comments - from such a file with the JSON.minify() project hosted - here on github at http://github.com/getify/JSON.minify -*/ -''' - - test1_res = '''{"foo":"bar","bar":["baz","bum","zam"],"something":10,"else":20}''' - - test2 = ''' -{"/*":"*/","//":"",/*"//"*/"/*/":// -"//"} - -''' - test2_res = '''{"/*":"*/","//":"","/*/":"//"}''' - - test3 = r'''/* -this is a -multi line comment */{ - -"foo" -: - "bar/*"// something - , "b\"az":/* -something else */"blah" - -} -''' - test3_res = r'''{"foo":"bar/*","b\"az":"blah"}''' - - test4 = r'''{"foo": "ba\"r//", "bar\\": "b\\\"a/*z", - "baz\\\\": /* yay */ "fo\\\\\"*/o" -} -''' - test4_res = r'''{"foo":"ba\"r//","bar\\":"b\\\"a/*z","baz\\\\":"fo\\\\\"*/o"}''' - - assert test_json(test1) == json.loads(test1_res),'Failed test 1' - assert test_json(test2) == json.loads(test2_res),'Failed test 2' - assert test_json(test3) == json.loads(test3_res),'Failed test 3' - assert test_json(test4) == json.loads(test4_res),'Failed test 4' - if __debug__: # Don't print passed message if the asserts didn't run - print 'Passed all tests' diff --git a/bootstrapvz/common/tools.py b/bootstrapvz/common/tools.py index 11ea050..a80c8c6 100644 --- a/bootstrapvz/common/tools.py +++ b/bootstrapvz/common/tools.py @@ -88,7 +88,7 @@ def inline_replace(file_path, pattern, subst): def load_json(path): import json - from minify_json import json_minify + from json_minify import json_minify with open(path) as stream: return json.loads(json_minify(stream.read(), False)) diff --git a/setup.py b/setup.py index 5c3e05f..7095a61 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,7 @@ setup(name='bootstrap-vz', 'pyrfc3339 >= 1.0', 'requests >= 2.4.3', 'pyro4 >= 4.30', + 'JSON_minify >= 0.3.0', ], license='Apache License, Version 2.0', description='Bootstrap Debian images for virtualized environments', diff --git a/tox.ini b/tox.ini index 3eab371..0e6c514 100644 --- a/tox.ini +++ b/tox.ini @@ -10,7 +10,7 @@ basepython = python2.7 [testenv:flake8] deps = flake8 -commands = flake8 bootstrapvz/ tests/ --exclude=minify_json.py {posargs} +commands = flake8 bootstrapvz/ tests/ {posargs} [testenv:unit] deps =