Blob Blame History Raw
From ba7b532f303fb73923902dedf1c1664daa2a65fb Mon Sep 17 00:00:00 2001
From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
Date: Thu, 25 Oct 2018 19:19:06 -0400
Subject: [PATCH 2/5] Unbundle JSON-minify.

Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
---
 asv/extern/minify_json.py | 128 --------------------------------------
 asv/util.py               |   5 +-
 pip_requirements.txt      |   1 +
 setup.py                  |   3 +-
 4 files changed, 5 insertions(+), 132 deletions(-)
 delete mode 100644 asv/extern/minify_json.py

diff --git a/asv/extern/minify_json.py b/asv/extern/minify_json.py
deleted file mode 100644
index ca87488..0000000
--- a/asv/extern/minify_json.py
+++ /dev/null
@@ -1,128 +0,0 @@
-'''
-Created on 20/01/2011
-
-v0.2 (C) Gerald Storer
-MIT License
-
-Based on JSON.minify.js:
-https://github.com/getify/JSON.minify
-
-Contributers:
- - Pradyun S. Gedam (conditions and variable names changed)
-'''
-
-
-import re
-
-def json_minify(string, strip_space=True):
-    tokenizer = re.compile(r'"|(/\*)|(\*/)|(//)|\n|\r')
-    in_string = False
-    in_multi = False
-    in_single = False
-
-    new_str = []
-    index = 0
-
-    for match in re.finditer(tokenizer, string):
-
-        if not (in_multi or in_single):
-            tmp = string[index:match.start()]
-            if not in_string and strip_space:
-                # replace white space as defined in standard
-                tmp = re.sub('[ \t\n\r]+', '', tmp)
-            new_str.append(tmp)
-
-        index = match.end()
-        val = match.group()
-
-        if val == '"' and not (in_multi or in_single):
-            escaped = re.search(r'(\\)*$', string[:match.start()])
-
-            # start of string or unescaped quote character to end string
-            if not in_string or (escaped is None or len(escaped.group()) % 2 == 0):
-                in_string = not in_string
-            index -= 1 # include " character in next catch
-        elif not (in_string or in_multi or in_single):
-            if val == '/*':
-                in_multi = True
-            elif val == '//':
-                in_single = True
-        elif val == '*/' and in_multi and not (in_string or in_single):
-            in_multi = False
-        elif val in '\r\n' and not (in_multi or in_string) and in_single:
-            in_single = False
-        elif not ((in_multi or in_single) or (val in ' \r\n\t' and strip_space)):
-            new_str.append(val)
-
-    new_str.append(string[index:])
-    return ''.join(new_str)
-
-
-if __name__ == '__main__':
-    # Python 2.6+ needed to run tests
-    import json
-    import textwrap
-    import unittest
-
-    class JsonMinifyTestCase(unittest.TestCase):
-        """Tests for json_minify"""
-        def template(self, in_string, expected):
-            in_dict = json.loads(json_minify(in_string))
-            expected_dict = json.loads(expected)
-            self.assertEqual(in_dict, expected_dict)
-
-        def test_1(self):
-            self.template(textwrap.dedent('''
-                // this is a JSON file with comments
-                {
-                    "foo": "bar",    // this is cool
-                    "bar": [
-                        "baz", "bum"
-                    ],
-                /* 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
-                */'''),
-                '{"foo":"bar","bar":["baz","bum"],"something":10,"else":20}'
-            )
-
-        def test_2(self):
-            self.template(textwrap.dedent('''
-                {"/*":"*/","//":"",/*"//"*/"/*/"://
-                "//"}'''),
-                '{"/*":"*/","//":"","/*/":"//"}'
-            )
-
-        def test_3(self):
-            self.template(textwrap.dedent(r'''
-                /*
-                this is a
-                multi line comment */{
-
-                "foo"
-                :
-                    "bar/*"// something
-                    ,    "b\"az":/*
-                something else */"blah"
-
-                }
-                '''),
-                r'{"foo":"bar/*","b\"az":"blah"}'
-            )
-
-        def test_4(self):
-            self.template(textwrap.dedent(r'''
-                {"foo": "ba\"r//", "bar\\": "b\\\"a/*z",
-                "baz\\\\": /* yay */ "fo\\\\\"*/o"
-                }
-                '''),
-                r'{"foo":"ba\"r//","bar\\":"b\\\"a/*z","baz\\\\":"fo\\\\\"*/o"}'
-            )
-
-    unittest.main()
diff --git a/asv/util.py b/asv/util.py
index efb41d1..ee3c5c3 100644
--- a/asv/util.py
+++ b/asv/util.py
@@ -27,11 +27,10 @@ import shlex
 import operator
 import collections
 
+import json_minify
 import six
 from six.moves import xrange
 
-from .extern import minify_json
-
 
 nan = float('nan')
 inf = float('inf')
@@ -780,7 +779,7 @@ def load_json(path, api_version=None, js_comments=False):
         content = fd.read()
 
     if js_comments:
-        content = minify_json.json_minify(content)
+        content = json_minify.json_minify(content)
         content = content.replace(",]", "]")
         content = content.replace(",}", "}")
 
diff --git a/pip_requirements.txt b/pip_requirements.txt
index 2a8662c..07d485c 100644
--- a/pip_requirements.txt
+++ b/pip_requirements.txt
@@ -1,3 +1,4 @@
+JSON_minify
 sphinx
 sphinx_bootstrap_theme
 six
diff --git a/setup.py b/setup.py
index efbfa42..54916e3 100755
--- a/setup.py
+++ b/setup.py
@@ -224,7 +224,8 @@ def run_setup(build_binary=False):
         ext_modules = ext_modules,
 
         install_requires=[
-            str('six>=1.4')
+            str('JSON_minify'),
+            str('six>=1.4'),
         ],
 
         extras_require={
-- 
2.31.1